2009-11-13 14 views
37

collection_select e select Rails helper: quale dovrei usare?rotaie collection_select vs. select

Non riesco a vedere una differenza in entrambi i modi. Entrambi gli helper accettano una raccolta e generano tag di opzioni all'interno di un tag select. C'è uno scenario in cui collection_select è migliore di select? o c'è qualcosa che mi manca qui?

risposta

63

collection_select è destinato ad essere utilizzato quando la lista degli articoli è un array di oggetti ActiveRecord. collection_select è costruito sulla parte superiore di select quindi è un metodo conveniente quando è necessario visualizzare una raccolta di oggetti e non una serie di stringhe.

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

Questa è chiaramente la risposta giusta e merita l'accettazione. cosa dà @webnuwan? – biagidp

0

E per quanto riguarda select, è possibile utilizzarlo con una Hash. L'ho usato con ENUM.

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

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

Si noti che ho dovuto usare invertito al fine di mostrare il valore corretto nell'opzione:

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

per riferirsi ad esso in un file spettacolo è possibile utilizzare Fruit.types e questo sarà restituire il nostro Hash precedente. In questo modo si può fare:

Fruit.types[obj.type] 

Ultima nota: È possibile utilizzare simboli anziché numeri, se si preferisce enum types: { 'Banana' => :banana, ... e si otterrà <option value="banana">Banana</option>