Поделиться частями среди разных ресурсов - PullRequest
0 голосов
/ 18 ноября 2011

У меня есть следующий фрагмент кода в моих представлениях:

- if admin?
  .meta
    Administrator options: 
    = link_to 'Edit This Post', edit_post_path(@post)
    |
    = link_to 'Delete This Post', @post, :method => 'delete', :confirm => 'Are you sure?'

Я обнаружил, что часто использую один и тот же базовый фрагмент кода, но иногда с разными ресурсами, а иногда с несколькими ресурсами настр.Я хотел бы выделить это в частичное, чтобы высушить его, но мне нужно написать так, чтобы он мог работать с локальными переменными или переменными экземпляра для любой модели.Например, мне нужно, чтобы он работал с:

@post, post, @page, page

Как вы это делаете?

Ответы [ 2 ]

1 голос
/ 19 ноября 2011

Вы можете написать свою частичку, чтобы быть независимой от данного объекта:

- if admin?
  .meta
    Administrator options: 
    = link_to 'Edit', [:edit, object]
    |
    = link_to 'Delete', object, :method => 'delete', :confirm => 'Are you sure?'

И тогда вы могли бы сделать что-то вроде

render :partial => 'shared/admin_link', :locals => { :object => @post }
1 голос
/ 18 ноября 2011

Вы можете зафиксировать переменную в части, используя опции :object или :collection в методе render.Опция :object передает один объект частичному, который может содержать что угодно.Опция :collection используется для передачи массива объектов, которые должны быть из того же Class.

Например, у вас есть @post и вы передаете его частичному, как это

<%= render :partial => 'layouts/my_partial', :object => @post, :as => :my_local_var %>

Затем вы можете получить доступ к объекту, вызвав my_local_var в частичном.Использование :collection немного отличается, но вы можете прочитать его самостоятельно здесь: http://guides.rubyonrails.org/layouts_and_rendering.html

Проблемой будет использование одного партиала в разных классах из-за имен маршрутов.Тогда вы не можете использовать edit_modelname_path(@instance_var), вы должны использовать маршруты Hash { :controller => params[:controller], :action => 'edit' } в методе link_to!

// Для создания ссылки без params[:controller]:

Это просто идеяЯ не делал этого раньше, но вы можете попробовать это, например:

Вы визуализируете партиал и используете :object => @instancevar, :as => :my_local_var, вы можете использовать следующую строку для создания динамической ссылки:

<%= link_to "link text", { :controller => my_local_var.class.to_s.pluralize.downcase, :action => 'edit', :id => my_local_var.id } %>

Тогда выне зависит от params[:controller], но может ссылаться на ссылку редактирования vars.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...