我对将控制器的实例变量传递给部分模板(以此实例变量命名)感到困惑。
来自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' %>
为什么会这样?
答案 0 :(得分:1)
据我所知,当地人通常必须明确地传递给部分人。它可以自动传递的唯一情况是当你传递该控制器动作的主要对象时,即如果你在foos控制器的某些动作中传递记录@foo。
在您的具体情况下,传递@product
应该会自动生效。如果您想要传递@foo
,则需要明确传递它。