Render partial: object vs: locals
<%= render :partial => 'partial/path', :locals => {:xyz => 'abc'} %>
против
<%= render :partial => 'partial/path', :object => @some_object %>
Я думаю, что первая делает локальную переменную с именем xyz
доступной в парциальном, а вторая делает локальную переменную с именем object
доступной в парциальном. Так в чем же разница? (Кроме того, locals
допускает более одной переменной)
Ответы
Ответ 1
Во втором случае использование: object будет определять переменную с тем же именем, что и частичная по умолчанию. Если мой частичный шаблон называется _user.html.erb, тогда в шаблоне будет указана локальная переменная с именем "пользователь".
Вы можете указать другое имя переменной: as = > "another_name".
Это описано здесь:
http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html, здесь: http://apidock.com/rails/ActionView/PartialRenderer
... и для старых Rails (версия <= v3.09):
http://apidock.com/rails/ActionView/Partials
Ответ 2
Вторая форма
render :partial => 'account', :object => @some_account
убедитесь, что переменная account
в частичном будет установлена на @some_account
.
Вы можете переименовать переменную с помощью параметра :as
.
Самое большое преимущество :locals
заключается в том, что
- у вас очень четкий контроль над объектами и именами
- вы можете назначить более 1 переменной
Итак, вы можете сделать что-то вроде
render partial => 'some_view', :locals => { :user => account.user, :details => some_details_we_retrieved }
делает возможным четкое разделение при необходимости.
Недостатком подхода :locals
является то, что он более подробный, а иногда и простой
render :partial => 'account'
совпадает с
render :partial => 'account', :locals => {:account => @account }
Так используйте тот, который вам подходит лучше (или где он подходит лучше всего).
Ответ 3
Если вы используете Rails 3+, используйте еще более простой синтаксис:
# Instead of <%= render partial: "account", locals: { account: @buyer } %>
<%= render 'account', account: @buyer %>
Источник: Частичный просмотр действий