2009-11-13 13 views
37

collection_select y select Rails helpers: ¿Cuál debo usar?rails collection_select vs. select

No veo la diferencia en ambos sentidos. Ambos ayudantes toman una colección y generan etiquetas de opciones dentro de una etiqueta de selección. ¿Hay un escenario donde collection_select es mejor que select? o es algo que me falta aquí?

Respuesta

63

collection_select está destinada a ser utilizada cuando la lista de elementos es una matriz de objetos ActiveRecord. collection_select está construido en la parte superior de select por lo que es un método conveniente cuando necesita mostrar una colección de objetos y no una matriz de cadenas.

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

Esto es claramente la respuesta correcta y digna de ser recibida. ¿Qué le da a @webnuwan? – biagidp

0

Y con respecto a select, se puede usar con un hash. Solía ​​usarlo con ENUM.

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

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

Tenga en cuenta que tuve que usar invertido con el fin de mostrar el valor correcto en la opción:

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

hacer referencia a ella en un archivo de presentación se puede utilizar Fruit.types y esto devolverá nuestra Hash anterior De esta manera usted puede hacer:

Fruit.types[obj.type] 

Última nota: Puede utilizar símbolos en lugar números si lo prefiere enum types: { 'Banana' => :banana, ... y obtendrá <option value="banana">Banana</option>