2009-11-13 96 views
37

collection_selectselect Rails的助手:哪一個我應該使用?軌collection_select與選擇

我看不出在兩個方面的差異。這兩個助手都需要一個集合並在選擇標籤中生成選項標籤。 collection_select是否比select好?還是我在這裏失蹤的任何東西?

回答

63

collection_select旨在當項目的名單是ActiveRecord對象的數組中。 collection_select構建於select的頂部,因此當您需要顯示對象集合而不是字符串數組時,這是一種方便的方法。

collection_select(:post, :author_id, Author.find(:all), :id, :name) 
+1

這顯然是正確的答案,值得認可。什麼給@webnuwan? – biagidp 2014-03-19 02:10:30

0

和關於select,您可以用散列使用它。我曾經和ENUM一起使用它。

# In a hypothetical Fruit model 
enum types: { 'Banana' => 0, 'Grape' => 1, 'Mango' => 2 } 

# In the view 
f.select :type, Fruits.types.invert 

注意,我不得不使用反轉,以顯示在選項中正確的值:

<select> 
    <option value="0">Banana</option> 
    <option value="1">Grape<option> 
    <option value="2">Mango</option> 
</select> 

要引用它在一個演示文件,您可以使用Fruit.types,這將返回我們之前的哈希。這樣,你可以這樣做:

Fruit.types[obj.type] 

最後一個音符:如果你喜歡enum types: { 'Banana' => :banana, ...您可以使用符號而不是數字,你會得到<option value="banana">Banana</option>