2010-09-23 8 views
38

मैं रेल 3 का उपयोग कर रहा हूं और एक पृष्ठ है जो डेटाबेस से पोस्ट की सूची आउटपुट करता है। मैं एक लिंक से एक पोस्ट को हटाने में सक्षम होना चाहता हूँ।हटाएं लिंक रेल 3 में "हटाएं" के बजाय "प्राप्त करें" भेजता है

नीचे दूसरा उदाहरण काम करता है, लेकिन पहला नहीं है। किसी को पता है कि पहला काम क्यों नहीं करेगा? मेरा विचार शामिल हैं:

resources :posts 

उत्तर

48

सुनिश्चित करें कि लेआउट में अपनी <head> अनुभाग में निम्न शामिल है:

# this link sends a "GET" request which asks for the #show function 
<%= link_to 'Delete', post, :method => :delete %> 

# this link sends the proper "DELETE" request which asks for the #destroy function 
<%= button_to 'Delete', post, :method => :delete %> 

मेरे मार्गों फ़ाइल निम्न शामिल

<%= javascript_include_tag :defaults %> 
<%= csrf_meta_tag %> 

रेल 3 में, अनुरोधों को सही ढंग से भेजा जा रहा है यह सुनिश्चित करने के लिए जावास्क्रिप्ट की मदद से अनुरोधों को हटाया जा रहा है। यदि आपके पास सीएसआरएफ मेटा टैग और आवश्यक जावास्क्रिप्ट कोड नहीं है, तो लिंक हटाएं काम नहीं करेगा। :defaults जावास्क्रिप्ट फ़ाइलों में शामिल हैं - दूसरों के बीच - prototype.js, और application.js। उत्तरार्द्ध में वह सामान होता है जो लिंक को काम करता है, लेकिन प्रोटोटाइप ढांचे पर निर्भर करता है।

यदि आप डिफ़ॉल्ट प्रोटोटाइप जावास्क्रिप्ट पुस्तकालयों का उपयोग नहीं करना चाहते हैं, तो कई अन्य ढांचे के लिए application.js के बंदरगाह हैं। उदाहरण के लिए आप jQuery एक here पा सकते हैं।

बटन अभी भी जावास्क्रिप्ट की परवाह किए बिना काम करेंगे, क्योंकि button_to के साथ जेनरेट किए गए HTML कोड में सभी आवश्यक जानकारी शामिल हैं। यही कारण है कि लिंक बटन नहीं होने पर आप बटन काम देख रहे हैं।

+0

महान जवाब दिया। धन्यवाद। –

+0

इससे मुझे बहुत मदद मिली। – Rupert

+0

धन्यवाद - क्या आप रेल की इस सुविधा के विवरण के लिए एक लिंक पोस्ट कर सकते हैं 3? – gorn

3

मेरे मामले में, मैं निम्नलिखित का उपयोग कर रहा था।

<%= javascript_include_tag :defaults %> 
<%= csrf_meta_tag %> 

मैं डिफ़ॉल्ट प्रोटोटाइप जेएस के नीचे jQuery सहित jQuery का भी उपयोग कर रहा था। इससे कुछ प्रकार का संघर्ष हो रहा था।

2

विनाशकारी कार्यों फ़ॉर्म सबमिशन के रूप में किया जाना चाहिए - http://www.w3.org/2001/tag/doc/whenToUseGet.html#checklist

आप हटाना विधि या फार्म का उपयोग के लिए उचित बटन शैली दे सकते हैं।

17

लग रहा है

<%= javascript_include_tag :defaults %> 

अब समर्थित नहीं है

http://apidock.com/rails/ActionView/Helpers/AssetTagHelper/JavascriptTagHelpers/javascript_include_tag

इसके बजाय की तरह, आप का उपयोग करना चाहिए

<%= javascript_include_tag 'application' %> 
+0

यह रेल 4.0.3 के लिए सच है। मैंने स्वीकार किए गए उत्तर को लागू करने का प्रयास किया, और यह तब तक काम नहीं किया जब तक कि मैंने यहां प्रतिस्थापन नहीं किया है। –

+0

मेरे बेकन को बचाया! – brntsllvn

+0

यह स्वीकार्य उत्तर होना चाहिए! धन्यवाद! –

0

यह काम करेंगे। मुद्दा यह तथ्य है कि आपको इसे सही मार्ग पारित करने की आवश्यकता है ताकि मार्ग इसे प्राप्त हो।

<%= link_to 'Delete', post_path(post.id), :method => :delete %> 
-1

इस .. इसकी एक सरल परिवर्तन ..

अपने मार्ग में जोड़ने का प्रयास करें।rb फ़ाइल

प्राप्त '/ सूचियों /: LIST_ID/टिप्पणी /: आईडी' => 'टिप्पणी # नष्ट'

मैं इस परिवर्तन और अब इसके काम कर रहे ..

+2

स्थायी परिवर्तन करने के लिए अनुरोध प्राप्त करने के लिए कभी भी अच्छा विचार नहीं है – Vincent

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