Rails partial的局部变量没有设置

时间:2011-05-21 17:01:47

标签: ruby-on-rails actionview

我对将控制器的实例变量传递给部分模板(以此实例变量命名)感到困惑。

来自http://api.rubyonrails.org/classes/ActionView/Partials.html的文档说:

默认情况下,PartialRenderer使用模板名称作为传递到模板中的对象的本地名称。这些例子实际上是相同的:

<%= render :partial => "contract", :locals => { :contract  => @contract } %>
<%= render :partial => "contract" %>

但在我的情况下,我无法获得同样的魔力。

的ProductsController#展示

@foo = "123456789"
以下版本中的

show.html.erb 工作(控制器的 @foo 显示为本地变量 foo _foo.html.erb 中:

<%= render :partial => 'foo', :locals => { :foo  => @foo } %>

但是下一个代码没有将控制器的@foo变量传递给 _foo.html.erb 部分:

<%= render :partial => 'foo' %>

为什么会这样?

1 个答案:

答案 0 :(得分:1)

据我所知,当地人通常必须明确地传递给部分人。它可以自动传递的唯一情况是当你传递该控制器动作的主要对象时,即如果你在foos控制器的某些动作中传递记录@foo。

在您的具体情况下,传递@product应该会自动生效。如果您想要传递@foo,则需要明确传递它。