Rails частичные локальные жители не сохраняются при отправке в другое частичное, как его собственные локальные

Я делаю частичное так:

<%= render :partial => 'widgets/some_partial, :locals => {:foo => 'bar'} %>

Итак, внутри _some_partial.html.erb я делаю еще две частичные части:

<% #foo.nil? #=> false %>
<%= render :partial => 'widgets/another_partial', :locals => {:foo => foo} %>
`<%= render :partial => 'widgets/another_partial_again', :locals => {:foo => foo} %>`

Локальная переменная foo отображает штраф в some_partial.html.erb и даже в another_partial_again.html.erb. Однако переменная foo недоступна в another_partial.html.erb, хотя я явно передал ее в вызове рендеринга.

Что здесь происходит?

Спасибо за помощь.

Ответ 1

решаемая. Оказывается, я также отдавал то же частичное от контроллера, не отправляя правильные локальные переменные. Спасибо в любом случае!!!

Ответ 2

У меня возникла ошибка undefined local variable or method для меня, когда я выполнял частичное с :locals.

Однако у меня была другая проблема, вызывающая мою проблему, поэтому я решил поделиться своим решением, если это поможет кому-то еще. (Эта страница была первым результатом, когда я все-таки ошибся в этой ошибке)

В основном просто убедитесь, что вы используете :partial => 'path/to/partial' в своем обращении к render.

т.е.

<%= render :partial => 'widgets/some_partial', :locals => {:foo => 'bar'} %>

НЕ нравится, что я делал:

<%= render 'widgets/some_partial', :locals => {:foo => 'bar'} %>

Легко для новичков-рельсов/рубинов, подобных мне, чтобы пропустить.

Ответ 3

Ввязался в этот очень старый вопрос, потому что я столкнулся с той же проблемой. Оказалось, что с Rails 4+, если вы не используете коллекции или макет, правильный путь:

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

Как описано здесь.