我想传递一个局部变量,该变量包含要出现在特定页面上的原点,该变量只包含一个带值的符号。
当我使用这个代码时,它工作得很好,原始变量可以在部分中访问:
render :partial => "products", :collection => @products, :locals => {:origin => :gallery}
但当我使用这个代码时,原点没有设置,并且在部分中不可访问:
render @products, :locals => {:origin => :gallery}
这里有什么不同?第二行代码是否与第一行代码一样呈现分部代码?
<%= render @products %>
实际上是呈现分部的简写语法。但是使用简写语法,Rails将忽略":locals"变量。在Rails指南中有更多关于这方面的内容。
因此,如果你想给渲染传递额外的选项,你必须指定":partial=>…"。如果你想知道为什么会发生这种情况,你可以看看Rails的源代码。
这里有一个很好的解释:Rails:对将局部变量传递给部分的语法感到困惑
简短的版本是,您可以在第二个示例中省略:locals
:
render @products, :origin => :gallery