Частичные локальные узлы Rails не сохраняются при отправке другому частному, как его собственный локальный - PullRequest
10 голосов
/ 06 августа 2009

Я отрисовываю частичку так:

<%= 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, хотя я явно передал ее в вызове рендеринга.

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

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

Ответы [ 3 ]

41 голосов
/ 05 декабря 2010

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

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

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

1011 * Т.е. *

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

НЕ как я делал:

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

Легко для пропавшего новичка в рельсах / рубине, как я.

3 голосов
/ 06 августа 2009

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

0 голосов
/ 08 августа 2017

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

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

Как задокументировано здесь .

...