2009-11-13 7 views
37

collection_select et select Rails de secours: Lequel dois-je utiliser?rails collection_select vs select

Je ne vois pas de différence dans les deux sens. Les deux assistants prennent une collection et génèrent des balises d'options à l'intérieur d'une balise de sélection. Y a-t-il un scénario où collection_select est meilleur que select? ou est-ce que quelque chose me manque ici?

Répondre

63

collection_select est destiné à être utilisé lorsque la liste des éléments est un tableau d'objets ActiveRecord. collection_select est construit sur le dessus de select donc c'est une méthode pratique lorsque vous avez besoin d'afficher une collection d'objets et non un tableau de chaînes.

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

Ceci est clairement la bonne réponse et mérite l'acceptation. qu'est-ce qui donne @webnuwan? – biagidp

0

Et en ce qui concerne select, vous pouvez l'utiliser avec un Hash. Je l'habitude de l'utiliser avec ENUM.

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

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

Notez que je devais utiliser inverti afin de montrer la valeur correcte dans l'option:

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

Pour y faire référence dans un fichier show vous pouvez utiliser Fruit.types et ceci renverrait notre précédent Hash. De cette façon, vous pouvez faire:

Fruit.types[obj.type] 

Dernière note: Vous pouvez utiliser des symboles plutôt que des numéros si vous préférez enum types: { 'Banana' => :banana, ... et vous obtiendrez <option value="banana">Banana</option>