10

我像这样渲染一个部分:

<%= 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.erbanother_partial_again.html.erb. 但是,another_partial.html.erb即使我在渲染调用中明确传递了 foo 变量,也无法访问它。

这里发生了什么?

谢谢您的帮助。

4

3 回答 3

41

undefined local variable or method当我渲染带有:locals定义的部分时,我也遇到了错误。

但是,我有一个不同的问题导致我的问题,所以我想我会分享我的解决方案,以防它帮助其他人。(毕竟当我用谷歌搜索这个错误时,这个页面是第一个结果)

基本上只要确保你:partial => 'path/to/partial'在调用中使用render.

IE

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

不像我在做的那样:

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

对于像我这样的 rails/ruby 新手来说很容易错过。

于 2010-12-05T03:09:25.610 回答
3

解决了。结果我也从控制器渲染了相同的部分,而没有发送正确的局部变量。无论如何谢谢!!!

于 2009-08-06T18:03:00.933 回答
0

碰到这个非常老的问题,因为我遇到了同样的问题。事实证明,如果您不使用集合或布局,Rails 4+ 的正确方法是:

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

如此处所述

于 2017-08-08T10:16:54.520 回答