2011-03-15 11 views
11

मैं हाल ही में इस समस्या का सामना किया: Rails 3 link_to (:method => :delete) not workingरेल 3 लिंक_ जनरेटर के लिए: पोस्ट,: डाल, और: हटाएं?

जो में मैं क्यों मेरे link_to 'test', test_path(:test => test), :method => :post काम कर रहा था उलझन में था (कारण है कि यह करने के बजाय हो रही थी पोस्टिंग)। चूंकि उपर्युक्त पोस्ट से पता चलता है, ऐसा इसलिए था क्योंकि मेरे पास रेल जावास्क्रिप्ट फ़ाइलें नहीं थीं, जो :post, :put & :delete के लिए गतिशील रूप से ऑन-द-फ्लाई बनाने का काम करती है।

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

मैंने कहीं पढ़ा है कि, तकनीकी रूप से, हाइपरलिंक्स (एंकर तत्व) केवल जीईटी अनुरोधों के लिए उपयोग किया जाना चाहिए, और बटन (फॉर्म तत्वों के भाग के रूप में) अन्य विधियों के लिए उपयोग किया जाना चाहिए।

तो, मेरे दो सवाल:

  1. वहाँ एक मणि बाहर वहाँ है कि एक ऐसा फ़ॉर्म तत्व को मेरे विचार में किसी भी link_to ... :method => पुनर्लेखन जाएगा ऑन-द-मक्खी जब अपने विचार प्रदान कर रहे हैं?
  2. यदि नहीं, तो मैं अपना खुद का लिखने के लिए दृश्य पार्सर में कैसे लगाऊंगा?

    = link_to 'Test Link', some_path(:with => some_resource), :method => :post 
    

    ... और मेरी गाया HTML आउटपुट इस के साथ बाहर आने के लिए है: (Haml का उपयोग कर, अधिमानतः)

अनिवार्य रूप से, मैं चाहूँगा कि मेरी Haml फ़ाइल में इस लिखना है

<form action="some_path?with=some_resource" method="post"> 
    <!-- insert appropriate _method hidden field here --> 
    <!-- add appropriate csrf token and whatnot --> 
    <button type="submit">Test Link</button> 
</form> 

... ताकि सभी link_to परिभाषित तरीकों के साथ सहायकों जावास्क्रिप्ट बिना काम करेंगे (इस प्रकार, सादा लिंक जिसका क्रिया है प्राप्त कोई असर नहीं पड़ेगा)?


मैं भी इस सवाल का क्यों भाग के बारे में कोई विचार, सराहनीय होगा विशेष रूप से क्यों रेल टीम इस कार्यक्षमता शुद्ध एचटीएमएल के माध्यम से ऐसा करने के बजाय जावास्क्रिप्ट से बंधा रखने का फैसला किया?

उत्तर

22

ऐसा लगता है कि आप वास्तव में एक तत्व तत्व (इस मामले में, एक बटन) चाहते हैं।

button_to 'Test Link', some_path(:with => some_resource), :method => :post

यह इसके अंदर एक input[type=submit] तत्व एक फ़ॉर्म जनरेट करेगा: यदि हां, तो आप button_to सहायक चाहते हैं।

जावास्क्रिप्ट के बिना, आपके पास एक हाइपरलिंक नहीं हो सकता है जो "GET" के अलावा HTTP क्रिया का उपयोग करके सबमिट करेगा।

module LinksHelper 
    def link_form(text, destination, options = {}) 
    form_tag(destination, :method => options.delete(:method)) do 
     <<-HTML 
     <!-- some HTML code here --> 
     <button type="submit">#{text}</button> 
     <!-- some more HTML code here --> 
     HTML 
    end 
    end 
end 
+0

महान:

आप प्रपत्र button_to द्वारा प्रदान की गई किया जा रहा है और अधिक शैली/नियंत्रण की जरूरत है, तो आप कुछ इस तरह कर सकते हैं। यह मुझे काम करने के लिए कुछ देता है। धन्यवाद! – neezer

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