Ruby on rails 3 渲染@对象和局部变量与渲染:局部

Ruby on rails 3 渲染@对象和局部变量与渲染:局部,ruby-on-rails-3,renderpartial,partials,Ruby On Rails 3,Renderpartial,Partials,我想传递一个局部变量,它包含一个特定页面上的原点,这个变量只包含一个带值的符号 当我使用这段代码时,它工作得非常完美,可以在以下部分中访问origin变量: render :partial => "products", :collection => @products, :locals => {:origin => :gallery} render @products, :locals => {:origin => :gallery} 但当我使用此代码时,

我想传递一个局部变量,它包含一个特定页面上的原点,这个变量只包含一个带值的符号

当我使用这段代码时,它工作得非常完美,可以在以下部分中访问origin变量:

render :partial => "products", :collection => @products, :locals => {:origin => :gallery}
render @products, :locals => {:origin => :gallery}
但当我使用此代码时,原点未设置,且无法在部分中访问:

render :partial => "products", :collection => @products, :locals => {:origin => :gallery}
render @products, :locals => {:origin => :gallery}
这里有什么区别?代码的第二行是否不像第一行那样呈现局部?


<%= render @products %>
确实是用于呈现分部的速记语法。但是使用速记语法,Rails将忽略“:locals”变量。这本书还有更多内容


因此,如果要向渲染传递额外选项,则必须指定“:partial=>…”。如果您想知道为什么会发生这种情况,可以看看Rails。

这里有一个很好的解释:

简短的版本是,您可以在第二个示例中省略
:locals

render @products, :origin => :gallery

是否应该是
:locals=>{:origin=>:gallery}
?@Nick这确实是一个输入错误,在我的应用程序中我使用了:locals=>{:origin=>:gallery},所以这不是问题所在。但这是一个很好的收获!:)您可以将一个局部变量传递到
@products
的末尾,它对我有效,但对我绝对无效(Rails 3.2.13)。与另一个问题的链接很有帮助。但我认为您的示例是错误的,因为您试图使用收集快捷方式,不幸的是,它不允许您传递本地信息。您可能正在考虑
渲染“产品”,:origin=>:gallery