我有以下三种render partial页面的代码,经过测试,只有1,3两个办法是正常显示了partial页面。是不是说,如果使用collection 这个symbole来设定参数的话,partial页面必须得与所引用collection类名的相同的:比如
_collection.html.erb
才能正常引用,而其他的不同名partial页只能做一个迭代呢?
(比如第二种在有collection作为参数时候会出错:
undefined local variable or method
collection' for #<#
Class:0x007fab417a6ae0:0x007fab45115b00>`,而如果显示纯文本,会循环collections.count 次数个。
后来我还尝试下:locals
参数,貌似它不用管partial page的命名规范。
第一种
<%= render :partial=>"collections/collection",:collection=>@user.collections%>
第二种
<%= render :partial=>"layouts/profile",:collection=>@user.collections%>
第三种
<%= render :partial=>"layouts/collection",:collection=>@user.collections%>
partial page
<%= collection.collection_type %>
经指点,第二种方法可如此写
<%= render :partial=>"layouts/profile",:collection=>@user.collections :as=>:collection%>
厉害了。
并且,:locals可以指定任意多个局部参数,提供给partial page使用。经过验证,可行。也就是,当时用:collection参数时,rails会默认渲染同类名的partial page,并传递参数,但是只要指定了:as,便可将collection集合中每个元素作为一个local variable传递给partial page,也就是如同
@user.collection.each do |co|
render 'xxx',:locals=>{:item=>co}
end
所以,当要利用collection的时候,添加:as参数是个好习惯,很多时候不一定都会使用同类名的_partial_page.html.erb