2013-02-27 19 views
25

Mam formularz, który nie ma skojarzonego z nim modelu, więc używam form_tag zamiast form_for. Zgodnie z oczekiwaniami, gdy użytkownik przesyła formularz, każde z pól jest uwzględnione w haszy params. Ale forma bardzo się zmieni i wolałbym mieć skrót w haśle params, który będzie zawierał wszystkie wartości pól formularza, więc nie będę musiał zmieniać kontrolera za każdym razem, gdy zmienię swój formularz.Parametry form_tag w zagnieżdżonej mieszance

Czy istnieje sposób na umieszczenie wartości pola formularza w zagnieżdżonym haszu, np. Form_for? Chciałbym być w stanie podjąć wszystkich pól formularza i konwertować je do formatu JSON wykonując coś jak params[:form_fields].to_json

Odpowiedz

50

Można użyć fields_for wewnątrz form_tag dla bardziej formalny sposób wyrażania się nazw.

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

Alternatywnie właśnie przestrzeni nazw wszystkich wejść formy, takie jak:

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

itd. Wtedy dostaniesz params[:form_fields] = {:my_text_field => "foo", :my_select_tag => "bar"}, co moim zdaniem jest to, czego chciał.

+0

Wydaje się, że robię dokładnie to, czego potrzebuję. Dzięki! –

+1

Stwierdzam, że silne params nie pasują do symbolu: my_text_field do ciągu znaków generowanego przez ": my_text_field" –

+0

nazwy łańcuchów elementów wejściowych są odwzorowane na symbole, więc '" my_text_field "' będzie pasowało do ': my_text_field', '": my_text_field "' prawdopodobnie nie. –

Powiązane problemy