36

रेल 3 जावास्क्रिप्ट विनीत बनाने के लिए कुछ शांत सामान करता है, इसलिए वे इस तरह बातें किया है:रेल 3 की "डेटा-विधि = 'हटाएं' कैसे गहराई से अपमानित करता है?

<a href="/logout" data-method="delete" rel="nofollow">Logout</a> 

को

= link_to "Logout", user_session_path, :method => :delete 

..converts लेकिन यह सिर्फ मेरे लिए हुआ .. जब मैं जावास्क्रिप्ट को बंद करें विधि अब और मिटा नहीं है, यह उम्मीद के रूप में मिलता है। तो क्या योजना है, या क्या कोई तरीका है, इन data- गुणों को गर्वपूर्वक अपनाने के लिए अनुमति दें, ताकि लिंक अभी भी एक डेली अनुरोध है?

उत्तर

37

इन data- विशेषताओं के साथ रेल 3 में किए गए परिवर्तन में सुंदर गिरावट नहीं थी, यह अविभाज्य जावास्क्रिप्ट के बारे में था।

रेल 2 में, एक लिंक पर :method => :delete को निर्दिष्ट इनलाइन JavaScript की एक पूरी गुच्छा है कि एक छिपा इनपुट के साथ एक फ़ॉर्म बनाते हैं और फिर प्रपत्र सबमिट उत्पन्न होगा। यह वही था जैसा कि अब है: जावास्क्रिप्ट बंद करें और यह एक जीईटी अनुरोध के लिए डिफ़ॉल्ट है। इस प्रकार, जावास्क्रिप्ट के मामले का समर्थन करना उतना ही वैसा ही है जितना पहले था।

एक विकल्प लिंक के बजाय एक रूप/बटन उपयोग करें ताकि आप, एक छिपी हुई फ़ील्ड के रूप में विधि शामिल कर सकते हैं बहुत पसंद रेल 2 जावास्क्रिप्ट करता है। एक अन्य विकल्प यह है कि जीईटी संस्करण आपको एक मध्यवर्ती पृष्ठ पर ले जाए, जिसके बदले में फॉर्म/बटन है।

नए दृष्टिकोण का लाभ यह है कि यह अविभाज्य है। HTTP क्रिया को बदलने के लिए जावास्क्रिप्ट बाहरी फ़ाइल में मौजूद है और यह निर्धारित करने के लिए data- विशेषताओं का उपयोग करता है कि यह किस तत्व से जुड़ा होना चाहिए।

4

आपके पास एकमात्र मौका एक फॉर्म परिभाषित करना है। एक लिंक जावास्क्रिप्ट के बिना या फॉर्म के बिना _method = "हटाएं" के साथ एक पोस्ट नहीं हो सकता है।

+0

यह क्वेरी स्ट्रिंग हो सकता है _method = हटाना – myfreeweb

+0

कर सकते हैं काम करता है, हाँ तुम सही – shingara

21

बल्कि link_to विधि का उपयोग करने से - जो आप JavaScript का उपयोग सुनिश्चित करना है कि HTTP विधि DELETE है की आवश्यकता होगी - button_to विधि है, जो एक छिपे हुए इनपुट तत्व है जो रेल बताता HTTP के इलाज के लिए के साथ एक फार्म बनाएगा का उपयोग के रूप में POST के रूप में विधि। यदि आवश्यक हो, तो आप फॉर्म में बटन को स्टाइल करने के लिए सीएसएस का उपयोग कर सकते हैं ताकि यह एक लिंक जैसा दिखता हो।

+0

यह मेरे लिए काम किया जब लिंक को ही जावास्क्रिप्ट के माध्यम से इस तथ्य के बाद लोड किया गया था, को रोकने रेल फार्म के साथ जगह से। मुझे लगता है 'button_to' काम किया क्योंकि यह बजाय जावास्क्रिप्ट के साथ की चीजों की रूबी पक्ष पर एक रूप में बदल जाता है के बाद पृष्ठ भरी हुई है। मैं 'button_to' के पहले कभी नहीं सुना था, इसलिए धन्यवाद! – LouieGeetoo

1

यह जावास्क्रिप्ट के बिना संभव नहीं है।

मैं data-method लिंक छद्म रूपों (उदाहरण के लिए लार्वेल प्रोजेक्ट में उपयोग किया गया) में लिंक विशेषता को परिवर्तित करने के लिए एक छोटी jQuery प्लगइन बना देता हूं।

आप इसका इस्तेमाल करना चाहते हैं:? https://github.com/Ifnot/RestfulizerJs

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