Частичные локальные файлы 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, хотя я явно передал ее в вызове рендеринга.

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

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


person user94154    schedule 06.08.2009    source источник
comment
Что вы подразумеваете под недоступным? Выдает undefined local variable or method или nil? Можете ли вы показать код, который использует foo в этих частях?   -  person agentofuser    schedule 06.08.2009
comment
он выдает неопределенную локальную переменную   -  person user94154    schedule 06.08.2009
comment
код был прост: ‹%= foo %›   -  person user94154    schedule 06.08.2009


Ответы (3)


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

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

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

I.e.

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

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

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

Новичку в rails/ruby вроде меня легко промахнуться.

person asgeo1    schedule 05.12.2010
comment
+1 @asgeo1 Странно, что вам нужно :partial, чтобы это заработало, но это действительно работает! - person iwasrobbed; 12.04.2011
comment
ух ты!!! Спасибо ... Я только изучаю Ruby, и я был совершенно сбит с толку этой ошибкой. Я хотел бы модифицировать больше очков. - person Nabheet; 12.02.2012
comment
Это также решило мою проблему, но мне действительно любопытно, почему нужно использовать метод render partial: "partial_name", locals: { foo: "bar" }. Я понимаю, что мы на самом деле рендерим партиал. Чего я не понимаю, так это того, как это отличается от представления. - person Olivier Lacan; 14.06.2013
comment
по-прежнему полезно в 2015 году! - person rdnewman; 31.01.2015

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

person user94154    schedule 06.08.2009
comment
На самом деле у меня была та же проблема, и мое решение было точно таким же - я понял это, когда увидел вашу ошибку: P - person Hugo Peixoto; 11.08.2009
comment
угу и я! ха. Я изменил свой haml с: - если myvar на - если определено? (myvar) && myvar - person Chris; 19.07.2011
comment
то же самое здесь, передавал частичный в AJAX, забыл изменить символ - person yoshyosh; 07.01.2012

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

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

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

person Carlo S    schedule 08.08.2017