Вы можете зафиксировать переменную в части, используя опции :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.