0

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

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

我尝试在文档http://guides.rubyonrails.org/layouts_and_rendering.html上查找它,但它似乎并没有暗示对集合有任何限制......我错过了什么或另一种方式来找出答案?

谢谢。

PS 但是,当我尝试将非常集合转换为数组时,它起作用了。

4

2 回答 2

1

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

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

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

:collection => @dogs.to_a
于 2013-02-04T15:43:13.880 回答
-1

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

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

于 2013-02-04T15:31:57.280 回答