сделать частичное: объект против: местные - PullRequest
64 голосов
/ 25 февраля 2011
<%= render :partial => 'partial/path', :locals => {:xyz => 'abc'} %>

против

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

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

Ответы [ 3 ]

49 голосов
/ 25 февраля 2011

Вторая форма

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 }

Так что используйте тот, который подходит вам лучше всего (или там, где он подходит лучше всего).

32 голосов
/ 25 февраля 2011

Во втором случае использование: object будет определять переменную с тем же именем, что и частичное по умолчанию. Если мой частичный шаблон называется _user.html.erb, то в шаблоне будет определена локальная переменная с именем «user».

Вы можете указать другое имя переменной с помощью: as => "another_name".

Это задокументировано здесь: http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html, здесь: http://apidock.com/rails/ActionView/PartialRenderer

... и для более старых Rails (версия http://apidock.com/rails/ActionView/Partials

16 голосов
/ 19 июля 2013

Если вы используете Rails 3+, есть еще более простой синтаксис:

# Instead of <%= render partial: "account", locals: { account: @buyer } %>
<%= render 'account', account: @buyer %>

Источник: Действие View Partials

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