2008-12-16 4 views
14

तो मैं अपने रेल app में एक फार्म मिल गया है जो एक कस्टम FormBuilder का उपयोग करता है मुझे देने के लिए कुछ कस्टम फ़ील्ड टैगरेल AJAX: मेरा आंशिक जरूरतों एक FormBuilder उदाहरण

<% form_for :staff_member, @staff_member, :builder => MyFormBuilder do |f| %> 
[...] 
    <%= render :partial => "staff_members/forms/personal_details", :locals => {:f => f, :skill_groups => @skill_groups, :staff_member => @staff_member} %> 
[...] 
<% end %> 

अब, यह आंशिक एक क्षेत्र में है फॉर्म जो एक AJAX कॉलबैक द्वारा प्रतिस्थापित हो जाता है। क्या मैं AJAX अनुरोध के जवाब में नियंत्रक से कर अंत है:

render :partial => "staff_members/forms/personal_details", :locals => {:skill_groups => @skill_groups, :staff_member => @staff_member} 

हालांकि, अगर मुझे लगता है कि तब प्रपत्र टूटता है, FormBuilder वस्तु मैं form_for में इस्तेमाल किया रूप में उपलब्ध नहीं है। क्या मेरे पास मेरे कस्टम फॉर्मबिल्डर ऑब्जेक्ट का उपयोग आंशिक रूप से AJAX कॉलबैक के लिए उपयोग करने के लिए करने का कोई तरीका है?

+0

मेरे पास नियमित फॉर्म निर्माता के साथ एक ही समस्या है, क्या मैं अभी भी फ़ील्ड का उपयोग करूंगा? – Joelio

उत्तर

14

अपने आंशिक के अंदर fields_for का उपयोग करें। यह एक समान कार्य करता है लेकिन फॉर्म टैग लपेटने के बिना। API docs देखें।

+0

हाय, मैं अंत में क्या कर रहा हूं :) यह थोड़ा अजीब है लेकिन यह वास्तव में फॉर्म बिल्डर्स – Gareth

+29

की तुलना में अच्छी तरह से गुजरने वाली वस्तुओं को महसूस करता है लेकिन आप उस स्थिति में क्या करते हैं जहां आपको वास्तव में उस फॉर्म निर्माता की आवश्यकता होती है? जैसे जब आप नेस्टेड फ़ील्ड (f.fields_for) पर कॉल कर रहे हैं? –

+5

क्या इसका कोई समाधान नहीं था? @AndrewVit मैं अभी भी आपकी टिप्पणी के 5 साल बाद इस मामले पर अटक गया हूं। – Donato

1

आप नियंत्रक में अपने फ़ॉर्म बिल्डर का एक नया उदाहरण का दृष्टांत सकता है, हालांकि यह मेरे लिए एक तरह से घटिया लगता है,:,

# in the controller 
render :partial => { 
    :f => MyFormBuilder.new(:staff_member, @staff_member, template), 
    :skill_groups => @skill_groups, 
    :staff_member => @staff_member 
} 

वैकल्पिक रूप से आप ग्राहक के पक्ष होने के लिए अद्यतन तर्क के और अधिक के लिए कदम सकता है जो wouldn आपको कुछ भी प्रस्तुत करने के बारे में चिंता करने की आवश्यकता नहीं है। आप बस जेएस के माध्यम से मूल्यों को अद्यतन कर सकते हैं। सुनिश्चित नहीं है कि यह आपके प्रोजेक्ट के लिए काम करता है या नहीं।

2

इस बारे में कैसे?

@template.with_output_buffer do 
    @template.form_for @model_object do |f| 
     f.fields_for :some_nested_attributes do |ff| 
     render :partial => 'nested_attributes', :object => @model_object, :locals => {:form => ff} 
     end 
    end 
    end 

इस विशेष रूप से उपयोगी हो सकता है कि तुम यहाँ मैं एक छोटे से कर रहा हूँ आंशिक

+0

इस पुरानी पोस्ट के बारे में क्षमा करें, लेकिन js.erb फ़ाइल के बारे में क्या? क्या वहां समस्या नहीं है? क्या आपका कोड html.erb या js.erb फ़ाइल का संदर्भ देता है? –

1

में नेस्टेड fields_for उपयोग करने के लिए खेल में देर से की जरूरत है, और शायद मैं सवाल ठीक से समझ में नहीं आता है हो सकता है,

ActionView::Base.default_form_builder = MyFormBuilder 
1

आप अपने ajax के भीतर प्रस्तुत कर सकते हैं f.object_name की सामग्री कहते हैं (यह भी आंशिक के साथ काम करता है) और उसका उपयोग http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html में परिभाषित टैग रेंडर करने के लिए: लेकिन ApplicationHelper.rb में मैं तुम सिर्फ पंक्ति जोड़ सकते हैं लगता है इसे पहले तर्क के रूप में पारित करना।

+2

क्या आप इस कार्यान्वयन के लिए कुछ नमूना कोड दे सकते हैं? – Marklar

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