2013-02-27 9 views
25

Ho un modulo a cui non è associato un modello, quindi sto utilizzando form_tag anziché form_for. Come previsto, quando l'utente invia il modulo, ciascuno dei campi è incluso nell'hash params. Ma la forma cambierà molto e preferirei avere un hash all'interno dell'hash params che manterrà tutti i valori del campo modulo in modo che non debba cambiare il mio controller ogni volta che cambio il mio modulo.Parametri form_tag nell'hash nidificato

C'è un modo per inserire i valori del campo modulo in un hash annidato come fa form_for? Mi piacerebbe essere in grado di prendere tutti i campi del modulo e convertirli in JSON facendo qualcosa di simile params[:form_fields].to_json

risposta

50

È possibile utilizzare fields_for all'interno di un form_tag di un modo più formale di esprimere uno spazio dei nomi.

fields_for :form_fields do |ff| 
    ff.text_field :my_text_field 
    ff.select :my_select_tag 
end 

In alternativa basta namespace tutti i vostri input di form, in quanto tale:

text_field_tag "form_fields[my_text_field]" 
select_tag "form_fields[my_select_tag]" ... 

ecc Poi si otterrà params[:form_fields] = {:my_text_field => "foo", :my_select_tag => "bar"}, che credo sia quello che volevi.

+0

Sembra che stia facendo esattamente quello di cui ho bisogno. Grazie! –

+1

Sto riscontrando che i parametri forti non corrispondono al simbolo: my_text_field alla stringa generata da ": my_text_field" –

+0

i nomi di stringa degli elementi di input sono mappati ai simboli, quindi "" my_text_field "' corrisponderà a ': my_text_field', '": my_text_field "' probabilmente no. –