Подтвердить что ты не робот

Render partial: object vs: locals

<%= render :partial => 'partial/path', :locals => {:xyz => 'abc'} %>

против

<%= render :partial => 'partial/path', :object => @some_object %>

Я думаю, что первая делает локальную переменную с именем xyz доступной в парциальном, а вторая делает локальную переменную с именем object доступной в парциальном. Так в чем же разница? (Кроме того, locals допускает более одной переменной)

4b9b3361

Ответ 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 %>

Источник: Частичный просмотр действий