Sei sulla strada giusta, ma non del tutto lì.
Mentre l'argomento finale su options_for_select
dovrebbe essere il valore dell'opzione selezionata. Il valore fornito :weighting
è un simbolo che non corrisponde al valore di nessuna delle opzioni specificate.
Sarà necessario fornire il valore effettivo. Se è stato utilizzato un oggetto istanza per costruire la forma come in
<%form_for @whatever do |o|%>
...
Si può semplicemente utilizzato @whatever.weighting.to_s
come in:
<%= o.select :weighting, options_for_select([
["Correct", "4", {:class=>"bold"}],
["Good", "3"],
["Average", "2"],
["Poor", "1"],
["Incorrect", "0", {:class=>"bold"}] ], @whatever.weighting.to_s), {},
html_options = {:class => "listBox", :style=>"float:left;"} %>
In caso contrario, c'è un modo per ottenere l'oggetto fuori dalla variabile del blocco modulo o. Ma questo è scherzare con interni che possono cambiare con un aggiornamento.
Modifica: Nel caso in cui si lavori con campi per e più parziali, è possibile estrarre l'oggetto particolare dalla variabile di blocco del modulo build.con l'oggetto accessor.
Riutilizzare l'esempio precedente in modo simile a questo per utilizzare la ponderazione corrente di ogni istanza figlio nella sezione di tale istanza del modulo.
<% form_for @parent do |p| %>
...
<% p.fields_for :children do |c| %>
...
<%= c.select :weighting, options_for_select([
["Correct", "4", {:class=>"bold"}],
["Good", "3"],
["Average", "2"],
["Poor", "1"],
["Incorrect", "0", {:class=>"bold"}] ], c.object.weighting.to_s), {},
html_options = {:class => "listBox", :style=>"float:left;"} %>
...
<% end %>
<% end %>
Questo può essere utilizzato anche in parziali.
Ho aggiornato la mia risposta a contenere un esempio di come fare questo quando hai a disposizione solo un oggetto form builder. – EmFi