2013-02-04 91 views
0

渲染部分函數是否採用任何類型的集合?我試圖傳遞一個集(@dogs),它似乎並沒有工作:渲染部分集合

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

我試圖尋找它的文檔http://guides.rubyonrails.org/layouts_and_rendering.html,但它似乎並沒有表明對集合任何限制......有沒有我錯過了或另一種方式找出?

謝謝。

PS但是,當我試圖將設置轉換爲數組,它工作。

回答

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 
+0

你會說基本上不使用集,因爲大多數Ruby代碼只知道如何處理散列/數組? – anNA

-1

正確的方法是通過收集到一個分音是

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

+0

這是將整個集合傳遞給partial的正確方法。然而,'render partial:「cat」,collection:@ cats'爲集合中的每個對象渲染一次,這是完全不同的事情。 –