2012-08-03 13 views
6

मेरे पास एक ऐसा पृष्ठ है जिसमें आप एक चालान बनाते हैं। एक अलग अनुभाग है जो आपको चालानों में भुगतान जोड़ने की अनुमति देता है। मैं जो करना चाहता हूं वह चालान बनाते समय भुगतान करने की क्षमता जोड़ता है।रेल किसी अन्य रूप के अंदर किसी फ़ॉर्म का हिस्सा प्रस्तुत करते हैं

मैं "भुगतान बनाएं" फ़ॉर्म प्रस्तुत करना चाहता हूं "चालान बनाएं" फ़ॉर्म में देखें। मैं यह कैसे कर सकता हूँ?

चालान फार्म दृश्य (नोटिस रेंडर कॉल): यहाँ कुछ कोड है

<%= form_for(@contract) do |f| %> 
    <div class="field"> 
    f.label "Add payment?" 
    <div id="pay_form"> 
     <%= render 'payments/pay_form' %> 
    </div> 
</div> 

(_pay_form.html.erb) भुगतान बनाने के रूप से आंशिक (नोटिस मैं form_for टैग सहित नहीं कर रहा हूँ यहाँ क्योंकि मैं ऊपर चालान पृष्ठ पर एक और रूप के अंदर अगले एक फार्म के लिए) नहीं करना चाहती:

<div class="field"> 
    <%= f.label 'Amount Paid:' %> 
    <%= f.text_field :amount %> 
</div> 
<div class="field"> 
    <%= f.label 'Payment Method' %> 
    <%= f.select :method, %w(Cash Credit Check) %> 
</div> 

मुख्य समस्या आंशिक में f चर मौजूद नहीं है। और यहां तक ​​कि अगर मैं इनवॉइस के f var को इसके फॉर्म से असाइन करता हूं, तो पैरामीटर के नाम params[:payment][:amount] के बजाय params[:invoice][:amount] होंगे। देखो मैं क्या कह रहा हूँ?

ऐसा करने के लिए जाने का सबसे अच्छा तरीका क्या है?

+0

आप की जाँच था [accepts_nested_attributes_for] (http://api.rubyonrails.org/classes /ActiveRecord/NestedAttributes/ClassMethods.html) और [fields_for सहायक] [http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for)? –

उत्तर

7

आपको दृश्य से आंशिक रूप से f चर पारित करने की आवश्यकता है।

ऐसा करने के लिए बदलने के

<%= render 'payments/pay_form' %> 

में

<%= render 'payments/pay_form', f: f %> 

आप नाम त्रुटियों का सामना करते हैं, क्योंकि दोनों नाम हैं f

कोशिश:

<%= render :partial => 'payments/pay_form', :locals => { :f => f} %> 

या

<%= form_for(@contract) do |builder| %> 
    <div class="field"> 
    builder.label "Add payment?" 
    <div id="pay_form"> 
     <%= render 'payments/pay_form', f: builder %> 
    </div> 
</div> 

आशा है कि इससे मदद मिलती है।

आगे सीखने के लिए, मुझे लगता है कि आप वास्तव में क्या देख रहे हैं वह नेस्टेड रूप है। अगर आप उनके बारे में सीखने में दिलचस्प हैं

यहाँ, इस विषय पर कुछ अच्छी ट्यूटोरियल हैं:

http://railscasts.com/episodes/196-nested-model-form-part-1 http://railscasts.com/episodes/197-nested-model-form-part-2

+0

इस प्रतिक्रिया के लिए धन्यवाद। मेरे पास यह कैसे है, भुगतान सीधे अनुबंधों से जुड़े नहीं हैं, इसलिए मूल रूप से मैंने accepts_nested_attributes_for के विचार को अनदेखा कर दिया है। हालांकि, मैं पूरी तरह से field_for सहायक के बारे में भूल गया था, जो कि मूल रूप के अंदर एक और रूप बनाये बिना आंशिक (जिसे फॉर्मबिल्डर वर्र्स 'एफ' का उपयोग किया जाता है) का उपयोग करने में सक्षम होने की आवश्यकता थी। तुमने मुझे सही रास्ता नीचे ले जाया! –

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