2011-01-29 21 views
6

मैं आज रेल में एक बुनियादी लिंक "नष्ट" बनाना चाहता था, इसलिए मैंने यह लिखा:रेल में एक नष्ट लिंक बनाने के लिए डिफ़ॉल्ट जावास्क्रिप्ट फ़ाइलों की आवश्यकता क्यों है?

<%= link_to "destroy me", @company, :method=>:delete 
%> 

उत्पन्न कोड था:

<a href="/companies/1" 
data-method="delete" 
rel="nofollow">destroy me</a> 

मेरी मार्गों में, हमेशा की तरह

resources :companies 

और मेरी नष्ट कार्रवाई मेरे नियंत्रक में थी।

लेकिन जब भी मैं लिंक पर क्लिक करता हूं, तो मुझे show कार्रवाई पर रीडायरेक्ट किया जाएगा। अजीब।

यह पता चला मैं अपने लेआउट में निम्न पंक्ति को शामिल नहीं किया:

<%= javascript_include_tag :defaults %> 

यह सहित के बाद, नष्ट लिंक काम किया!

क्यों? इस काम को करने के लिए मुझे डिफ़ॉल्ट जावास्क्रिप्ट टैग क्यों शामिल करने की आवश्यकता होगी?

और चूंकि मैं प्रोटोटाइप का उपयोग नहीं करना चाहता, मैं केवल उन फ़ाइलों को कैसे शामिल करूं?

उत्तर

6

3.0 के बाद से, रेल फॉर्म हेल्पर्स एचटीएमएल 5 डेटा विशेषताओं (आपके उदाहरण में डेटा-विधि) के साथ स्वच्छ HTML टैग उत्पन्न करते हैं। इन डेटा विशेषताओं का समर्थन करने के लिए, प्रोटोटाइप के लिए rails.js आवश्यक है। यदि आप jQuery का उपयोग करते हैं, तो jQuery संस्करण (https://github.com/rails/jquery-ujs) की आवश्यकता है।

बस डालें, rails.js जावास्क्रिप्ट ढांचे (प्रोटोटाइप या jquery) के साथ एक जादू पर हुक क्लिक और अन्य घटनाओं के लिए कुछ जादू करता है, अन्यथा जब आप किसी लिंक पर क्लिक करते हैं, तो सामान्य क्लिक होता है क्योंकि जावास्क्रिप्ट के बिना, लिंक एक सामान्य लिंक है।

+0

शीर्ष उत्तर वहाँ। – changelog

2

यह एचटीएमएल की सीमाओं और तथ्य यह है कि एंकर टैग जीईटी के अलावा किसी भी विधि के साथ अनुरोध जमा नहीं कर सकता है।

यदि आप rails.js (जिसे :defaults के साथ शामिल किया जाएगा) देखें, जब आप "डेटा-विधि" वाले लिंक पर क्लिक करते हैं, तो यह एक फॉर्म उत्पन्न करता है और सबमिट करता है जो यूआरएल को सबमिट करने के लिए सही http विधि का उपयोग करता है एंकर टैग में निर्दिष्ट है।

यह एक वर्कअराउंड का हैक है, लेकिन सामान्य एंकर टैग बनाने के लिए वास्तव में कोई अन्य विकल्प नहीं है DELETE अनुरोध सबमिट करें (या जीईटी से कोई अन्य HTTP क्रिया) सबमिट करें।

यदि आप जेएस का उपयोग नहीं करना चाहते हैं, तो अनुरोध करने के लिए एक फॉर्म (शायद link_to के बजाय बटन_to का उपयोग करके) का उपयोग करें। यदि आप फॉर्म बनाने के लिए अपना स्वयं का सहायक बनाते हैं, तो आप इसे बटन टैग (जैसे इनपुट बनाने वाले इनपुट के विपरीत) का उपयोग कर सकते हैं जो एक सामान्य लिंक की तरह दिखने के लिए काफी आसान शैली है।

+0

नीचे वोट क्यों? क्या मेरा जवाब सही नहीं है? – idlefingers

+0

नीचे वोट मेरा नहीं था, लेकिन जेम्स का जवाब मौके पर था। – changelog

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