2009-11-13 11 views
37

collection_select und select Rails Helfer: Welche sollte ich verwenden?Schienen collection_select vs wählen

Ich kann keinen Unterschied in beiden Wegen sehen. Beide Helfer nehmen eine Sammlung und generieren Options-Tags innerhalb eines Auswahl-Tags. Gibt es ein Szenario, in dem collection_select besser ist als select? oder fehlt mir hier etwas?

Antwort

63

collection_select hilft sollte verwendet werden, wenn die Liste der Elemente ist ein Array von Active Objekten. collection_select ist auf der Oberseite von select gebaut, so ist es eine bequeme Methode, wenn Sie eine Auflistung von Objekten und nicht ein Array von Zeichenfolgen anzeigen müssen.

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

Dies ist eindeutig die richtige Antwort und verdient Akzeptanz erhalten. Was gibt @webnuwan? – biagidp

0

Und in Bezug auf select, können Sie es mit einem Hash verwenden. Früher habe ich es mit ENUM benutzt.

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

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

Bitte beachte, dass ich Invertzucker zu verwenden, um hatte den richtigen Wert in Option zu zeigen:

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

Um es in einer Show-Datei verweisen Sie Fruit.types verwenden können und dies wird wieder unsere vorheriger Hash. Auf diese Weise können Sie tun:

Fruit.types[obj.type] 

Letzte Anmerkung: Sie können Symbole statt Zahlen verwenden, wenn Sie enum types: { 'Banana' => :banana, ... bevorzugen, und Sie werden <option value="banana">Banana</option>