2013-10-06 18 views
8

Ho una discesa in una forma rotaie:rotaie valori discesa 4 Completare dal database

<%= f.select :lists, [["test1", 1], ["test2", 0]] %> 

Questo funziona bene, ma come posso rendere dinamico. (Interagendo con i dati del modello)

Ho un controller con un'azione contenente @list = List.all

Come posso compilare id e name nel mio combobox. Ho cercato in giro, ma non ne sono chiaro. Qualcuno può aiutare>

risposta

11

È possibile utilizzare options_from_collection_for_select.

<% options = options_from_collection_for_select(@list, 'id', 'name') %> 
<%= f.select :all_val, options %> 
+0

Se uso' options_from_collection_for_select (@people, 'id', ' nome ') 'ottenendo l'errore come' metodo non definito 'map' per nil: NilClass'. Che errore sto facendo – overflow

+0

Direi che '' '@ people''' è nullo. Stai usando '' 'lista @'' nella tua domanda. – mechanicalfish

+0

scusate se si tratta di un errore di copia incolla in effetti ho questo '<% = options_from_collection_for_select (@list, 'id', 'name')%>' ma lo stesso errore – overflow

2

non del tutto hanno abbastanza reputazione per rispondere alla tua domanda nel thread sopra @learner ma c'è una buona probabilità che @overflow non ha avuto @List definito nel suo controllore.

per risolvere il mio caso ho messo il mio equivalente di @List (in questo caso @restaurants) nel mio metodo "DEF nuova" dal momento che stavo usando per contribuire a creare nuovi elementi con ristoranti associati.

# GET /specials/new 
    def new 
    @special = Special.new 
    @restaurants = Restaurant.all // Look Here 
    end 

Inoltre, : all_val nella risposta originale dovrebbe essere il parametro che si desidera passare al database. Nel mio caso è stato : restaurant_id

0

Questo ha funzionato per me

# view 
<%= form.select(:list_id) do %> 
    <% @list.each do |l| -%> 
     <%= content_tag(:option, l.name, value: l.id) %> 
    <% end %> 
<% end %> 

e

# controller 
@list ||= List.all 

`

Problemi correlati