1

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

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

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

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

但就我而言,我无法获得同样的魔力。

ProductsController#show :

@foo = "123456789"

以下版本中的show.html.erb有效(控制器的@foo_foo.html.erb中显示为局部变量foo):

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

但接下来的代码不会将控制器的 @foo 变量传递给_foo.html.erb部分:

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

为什么这样?

4

1 回答 1

1

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

在您的特定情况下,传递@product应该自动工作。如果你想通过@foo,你需要明确地通过它。

于 2011-05-21T17:35:37.057 回答