2011-08-22 8 views
6

मेरे पास मेरे show.erb में नेस्टेड गुण हैं और मैं एक खाली नेस्टेड विशेषता बना देता हूं और नीचे की तरह रिक्त स्थान वाले आइटमों का ग्रिड दिखाता हूं।नेस्टेड विशेषताओं के लिए एक डिलीट लिंक जोड़ना

<%= form_for @question do |q| %> 
    <% q.fields_for :answers, @question.answers do |l| %> 
    <tr> 

     <td><%= l.text_field :text %></td> 
     <td><%= l.check_box :correct %></td> 
     <td><%= l.text_field :imagename %></td> 
     <td><%= l.number_field :x %></td> 
     <td><%= l.number_field :y %></td> 
    </tr> 
    <% end %> 

    <tr> 
     <td colspan=5 align=right><%= submit_tag '+' %> 
    </tr> 

<% end %> 

मैं एक LINK_TO 'नष्ट' काम करना चाहता हूँ, लेकिन मैं undefined method 'plural' हो रही है जब मैं ग्रिड

<%= link_to 'Destroy', l, :controller => "answer", :confirm => 'Are you sure?', :method => :delete %> 

उत्तर

21

आप एक लिंक का उपयोग क्यों करना चाहते हैं? आप नेस्टेड विशेषताओं में नष्ट कार्यक्षमता का भी उपयोग कर सकते हैं।

तुम सब करने की ज़रूरत है अपने accepts_nested_attributes परिभाषा :allow_destroy => true जोड़ सकते हैं और प्रत्येक रिकॉर्ड के

<%= l.check_box '_destroy' %> 

जोड़ना है। इस तरह से यह रिकॉर्ड सहेजते समय चेक किए गए चेक-बॉक्स के साथ सभी नेस्टेड रिकॉर्ड्स को हटा देता है।

1

चर आप l उपयोग कर रहे हैं सही नहीं है करने के लिए इस जोड़ें। जब आप fields_for ब्लॉक से ब्लॉक करते हैं तो ब्लॉक ऑब्जेक्ट FormBuilder का एक उदाहरण ऑब्जेक्ट का उदाहरण नहीं है। आप किस यूआरएल को इंगित करना चाहते हैं? क्या यह Answers#destroy है? क्या नष्ट करना है यह पहचानने के लिए आप इस क्रिया को किस आईडी को भेजना चाहते हैं? एक link_to एक फॉर्म तत्व नहीं है। यह एक एंकर टैग के लिए सिर्फ एक सहायक है। आपको उस लिंक को बनाने के लिए एक फॉर्म निर्माता नहीं, एक यूआरएल चाहिए।

क्या यह उत्तर फ़ॉर्मों की एक सूची होगी? प्रत्येक उत्तर के लिए एक? यदि ऐसा है, तो आप केवल fields_for का उपयोग करने के बजाय उनके माध्यम से लूप करना चाहेंगे।

उम्मीद है कि यह आपको सही रास्ते पर जाने में मदद करता है।

+0

हाँ, मैं फार्म बिल्डर –

9

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

कॉलबैक या जेएस व्यू फ़ाइल में पृष्ठ को अपडेट करने के लिए सर्वर को AJAX के रूप में अद्यतन भेजना है। दूरस्थ निकालें: सत्य और यह एक नियमित लिंक के रूप में काम करेगा।

# For my form I build a new object if it's missing, 
# so I need to check that this is not a new nested attribute. 
- unless question.answers.new_record? 
    # Basically, I am sending over the fields that would be sent 
    # by the _delete check box form being updated. 
    = link_to "Delete", question_path(question.id, question: { answers_attributes: { id: question.answers.id, "_destroy" => true }}), remote: true, confirm: "Really delete?", method: :put 
+1

हाँ यह एक has_many संबंधों पर ठीक काम करता है के बजाय मॉडल गुजर नहीं के लिए एक बेवकूफ हूँ। इसके अलावा, एक पुष्टिकरण बॉक्स प्राप्त करने के लिए आप ', डेटा: {पुष्टि:' आप निश्चित कर सकते हैं? ' } 'विधि के ठीक बाद': एक चीज़ जो मैंने देखा (कम से कम मेरे मामले में) यह था कि आइटम हटा दिया गया था लेकिन पृष्ठ स्वचालित रूप से पुनः लोड नहीं हुआ था। – 8bithero

+0

has_many पर पुष्टि के लिए धन्यवाद (कोई विचार नहीं कि यह क्यों काम नहीं करेगा)। पुष्टि के बारे में आपकी टिप्पणी से कुछ नोट्स भी जोड़े गए, और यदि आप रिमोट को हटाते हैं: सच है, तो इसे नियमित लिंक की तरह काम करना चाहिए और पृष्ठ को रीफ्रेश करना चाहिए - अन्यथा आपको इसे स्वयं संभालना होगा। – d3vkit

+0

मैं मानता हूं, यूएक्स वास्तव में एक डिलीट चेकबॉक्स के साथ अजीब है – Dex

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