2012-02-22 5 views
9

ho in una forma (form_tag) diverse caselle di controllo come questo:Rails 3 - come salvare (dis) le caselle di controllo?

<%=check_box_tag 'model_name[column_name]', 1, (@data.model_name.column_name == 1 ? true : false)%> 

e aggiornamento come loro:

variable = ModelName.find(params[:id])    
variable.update_attributes(params[:model_name]) 

questo funziona solo in un momento, quando posso controllare alcune caselle di controllo - inviare loro e loro saranno salvati. Va bene. Ma quando ho deselezionare tutte le caselle di controllo - inviare forma - quindi niente è accaduto, nella tabella di DB non impostare il valore 0 nelle colonne ...

potreste darmi qualsiasi suggerimento, come risolvere il problema?

Grazie in anticipo

risposta

20

Questo accade perché un casella deselezionata non invierà alcun valore al server. Per aggirare questo Rotaie fornisce il check_box helper, che genera il codice come questo:

<input type="hidden" name="model[attr]" value="0" /> 
<input type="checkbox" name="model[attr]" value="1" /> 

alternativa, inserire un campo nascosto con hidden_field_tag:

<%= hidden_field_tag 'model_name[column_name]', '0' %> 
<%= check_box_tag 'model_name[column_name]', 1, (@data.model_name.column_name == 1 ? true : false) %> 
+0

grazie, ma l'input nascosto deve essere prima la casella di controllo, in la sequenza mentre la scrivi non funziona – user984621

+0

Questo metodo funziona, ma per me ho '<% = hidden_field_tag ​​'nome_modello [nome_colonna]'%>' e memorizza un insieme vuoto di virgolette all'inizio dell'array. .. Come faccio a sbarazzarsi delle virgolette extra vuote? – Gcap