2012-04-19 18 views
9

Ci sono così tanti risultati per questa ricerca su google, ed è anche richiesto a SO - ma le soluzioni discusse finora non mi stanno aiutando. Ecco il problema: ho un form_for @company |f| e sto usando f.collection_select per company_status_id - ma quando il modulo viene caricato, voglio lo stato attuale della società selezionato se è impostato. Tramite il debugger so che è stato impostato, eppure sto visualizzando un valore predefinito lì. Ecco il codice:f.collection_select non visualizza il valore selezionato

= puts @company.company_status_id 
= f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value} 

Ecco il htmnl generato

<select id="company_company_status_id" prompt="-Select-" name="company[company_status_id]"> 
<option value="1">-Not Available-</option> 
<option value="2">Active</option> 
<option value="3">Bankrupt</option> 
<option value="4">Acquired</option> 
</select> 

E le condizioni rimangono le stesse, anche se faccio:

f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value, :selected => :selected => @company.company_status} 

O

f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value, :selected => @company.company_status} 
+0

Attraverso la dichiarazione mette lì, vedo la company_status_id essere impostato, ma non funziona correttamente. Sto usando le guide 2.3.11. [questo] (http://stackoverflow.com/a/1065359/878451) risposta dice esattamente quello che voglio, e anche quello che sto facendo, ma ciò che non funziona. –

+0

questo dovrebbe funzionare. mostra @ company.company_status_id e ListCache.company_statuses – tokland

+0

Puoi pubblicare la definizione del tuo modulo perché dipende da cosa è f.object? –

risposta

20

Questo è quello che ho finalmente fatto:

f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value, :selected => @company.company_status_id.to_i} 

ho letto su delle risposte su una questione analoga che collection_select automaticamente seleziona il valore selezionato facendo il confronto di ciò che viene passato con gli attributi della collezione. apparentemente c'era una differenza tra i loro tipi e il confronto tra int da CompanyStatus a int di @ company.company_status_id.to_i ha funzionato. Anche se @ company.company_status_id dovrebbe essere anche int. Posso vederlo nel db. Ad ogni modo, questa linea di codice ha funzionato.

Se qualcuno può visitare l'exploratore, sarò molto grato!

+1

Risposta eccellente bro. Genio. Ecco il mio upvote. –

+0

questo ha aiutato molto, grazie. – Batman

+0

Tuttavia ovviamente non funzionerà con Mongoid. –

0

Usa select_tag invece

<%= form_for(@product, :html => {:multipart => true}) do |f| %> 


    <%= select_tag("product[category_id]", options_for_select(@categories.map { |cat| [cat.name, cat.id] })) %> 

    <%end%> 

Spero che questo aiuto si .....

+0

Se dovessi usarlo con l'oggetto form, f, come sarebbe? Ti piace questo? '<% = f.select (" model_name_object [company_status_id] ", options_for_select (@ categories.map {| cat | [cat.name, cat.id]}))%>' –

2
<% form_for(@company) do |f| %> 
    <%= f.select(:company_status_id, ListCache.all.map {|lc| [lc.name, lc.id]}) %> 
<% end %> 
3

Se si utilizza collection_select aiutante, la sintassi è molto semplice:

<%= f.collection_select :category_id, Category.all, :id, :name, 
         prompt: true, selected: @product.category_id %> 

Spero che questo aiuto

+0

Questa è l'unica soluzione funzionante. – prograils

Problemi correlati