渲染集合的部分

时间:2013-02-04 15:02:29

标签: ruby-on-rails-3 partials

渲染部分函数是否采用任何类型的集合?我试过传递一个Set(@dogs)并且它似乎不起作用:

<%= render(:partial => "dog", :collection => @dogs, :as => :dog) %>  

我尝试在文档http://guides.rubyonrails.org/layouts_and_rendering.html上查找它,但它似乎没有暗示对集合的任何限制......是否有我错过的内容或其他方法可以找到?

感谢。

PS但是当我试图将这个设置转换为数组并且它有效时。

2 个答案:

答案 0 :(得分:1)

它不适用于集合,因为PartialRenderer#collection方法尝试使用to_ary将集合强制转换为数组:

def collection
  if @options.key?(:collection)
    collection = @options[:collection]
    collection.respond_to?(:to_ary) ? collection.to_ary : []
  end
end

但是Set没有实现to_ary,因此,正如您所发现的那样,您必须像这样传递集合:

:collection => @dogs.to_a

答案 1 :(得分:-1)

正确的方法是将集合传递给部分

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