2013-02-27 137 views
25

में फॉर्म_टैग पैरामीटर मेरे पास एक ऐसा फॉर्म है जिसमें इसके साथ कोई मॉडल नहीं है, इसलिए मैं form_for के बजाय form_tag का उपयोग कर रहा हूं। जैसा कि अपेक्षित था, जब उपयोगकर्ता फार्म सबमिट करता है तो प्रत्येक फ़ील्ड को पैरा हैश में शामिल किया जाता है। लेकिन फॉर्म बहुत बदल जाएगा और मैं पैरा हैश के भीतर हैश रखना पसंद करूंगा जो सभी फॉर्म फ़ील्ड मानों को रखेगा ताकि जब भी मैं अपना फॉर्म बदलूं, मुझे अपने नियंत्रक को बदलने की ज़रूरत नहीं है।नेस्टेड हैश

क्या फॉर्म फ़ील्ड मानों को नेस्टेड हैश में form_for करता है? मैं प्रपत्र फ़ील्ड्स के सभी लेने के लिए और आप एक नाम स्थान को व्यक्त करने का एक और अधिक औपचारिक तरीके के लिए एक form_tag अंदर fields_for उपयोग कर सकते हैं की तरह params[:form_fields].to_json

उत्तर

50

कुछ कर रही द्वारा json के लिए उन्हें बदलने के लिए सक्षम होने के लिए करना चाहते हैं।

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

वैकल्पिक रूप से सिर्फ अपने सभी फ़ॉर्म इनपुट, नाम स्थान जैसे:

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

आदि तो फिर तुम params[:form_fields] = {:my_text_field => "foo", :my_select_tag => "bar"}, जो मुझे लगता है कि तुम क्या चाहते थे है मिल जाएगा।

+0

ऐसा लगता है कि मुझे वही करना है जो मुझे चाहिए। धन्यवाद! –

+1

मुझे लगता है कि मजबूत पैराम प्रतीक से मेल नहीं खाते हैं: my_text_field ": my_text_field" –

+0

से उत्पन्न स्ट्रिंग में इनपुट तत्वों के स्ट्रिंग नाम प्रतीकों के लिए मैप किए गए हैं, इसलिए 'my_text_field" 'my_text_field' से मेल खाएगा, '": my_text_field "शायद नहीं होगा। –