2010-01-21 9 views
6

मेरे पास कस्टम प्रपत्र निर्माता है, और इस कस्टम निर्माता के कारणों में से एक यह है कि प्रत्येक रूप के लिए, मुझे कुछ अतिरिक्त पैराम शामिल करने की आवश्यकता है जिन्हें मैं स्पष्ट रूप से नहीं रखना चाहता मेरे द्वारा लिखे गए हर रूप में छिपे हुए फ़ील्ड टैग।कस्टम रेल फॉर्म के साथ अतिरिक्त फ़ील्ड बिल्डर

for_for(@foo, :builder => MyBuilder) do |f| 
    # stuff I shouldn't have to worry about 
    # this should be put in all the time without me having to do it 
    hidden_field_tag('extra', 'myextrainfo') 

    # normal things I would put in 
    f.text_field(:bar) 
end 

मुझे अपने कस्टम प्रपत्र बिल्डर में क्या करना होगा, या मैं क्या ओवरराइड कर सकते हैं या विधि श्रृंखला (बस यूआरएल पैरामीटर जोड़ने के बिना) के रूप में कुछ अतिरिक्त छिपा बातें जोड़ने के लिए?

उत्तर

5

यह थोड़ी मुश्किल थी (रुबी/रेल के लिए उचित नया), लेकिन मुझे एक समाधान मिला। इसे कुछ सहायक फ़ाइल में रखें (या आपकी ज़रूरतों के आधार पर एक और स्थान)।

module ActionView::Helpers::FormHelper 
    def form_for_with_updated_code(record_or_name_or_array, *args, &proc) 
    form_for_without_updated_code(record_or_name_or_array, *args) { |f| 
     concat(hidden_field_tag('extra','info')) 
     proc.call(f) 
    } 
    end 
    alias_method_chain :form_for, :updated_code 
end 

यह form_for विधि को ओवरराइड करता है और आपके छिपे हुए फ़ील्ड को जोड़ता है। आप extract_options! का उपयोग कर *args पैरामीटर से छिपे हुए फ़ील्ड को भरने के लिए अतिरिक्त व्यक्तिगत विकल्पों में कोड जोड़ सकते हैं।

+0

बहुत अच्छा। जीत से भरा धन्यवाद! –

संबंधित मुद्दे