2010-11-16 18 views
6

मेरे पास एक बटन_ है कि मैं एक पुट एक्शन करना चाहता हूं (केवल एक चीज है जिसे इस संसाधन के बारे में अपडेट किया जा सकता है - इसे 'स्वीकृत' के रूप में अपडेट किया जाएगा , इसलिए कार्रवाई को फायर करने से जुड़े कोई अन्य फॉर्म फ़ील्ड नहीं हैं)।Rails3 बटन_to POUT कार्रवाई को कॉल कर रहा है, PUT कार्रवाई को कॉल करने का प्रयास कर रहा है

यह मेरे विचार में है (नियंत्रक स्पष्ट रूप से क्योंकि बटन एक राय यह है कि एक और नियंत्रक के अंतर्गत आता है पर है दिया जाता है):

<%= button_to "Acknowledged", :controller => 'practice_sessions', :id => @practice_session.id, :method => :put %> 

मेरी मार्गों फ़ाइल में, संसाधन एक आरामदायक संसाधन के रूप में घोषित किया गया है :

resources :practice_sessions 

इस संसाधन के नियंत्रक के पास एक निर्माण और अद्यतन कार्रवाई है, और ऊपर बटन_to बनाने की क्रिया को कॉल करता है। मैं इसे अद्यतन कार्रवाई को कॉल करना चाहता हूं।

यह सही बनाने कार्रवाई सक्रिय होने से पहले लॉग के माध्यम से आता है:

Started POST "/practice_sessions?id=21&method=put" for 127.0.0.1 at 2010-11-17 08:52:46 +0000 
    Processing by PracticeSessionsController#create as HTML 
    Parameters: {"authenticity_token"=>"1EW0IlI38d0f4wST5azrCEZVZPfih7i0UvCGSF7eqbc=", "id"=>"21", "method"=>"put"} 

उत्तर

17

आपका वाक्य रचना थोड़ा बंद है। button_to तीन तर्क लेता है: बटन शीर्षक, options हैश, और html_options हैश। :method=>:put को html_options में जाना होगा, जबकि मार्ग पैरामीटर को options में जाना होगा। तो तुम इतनी तरह पुनर्लेखन कर सकते हैं:

<%= button_to "Acknowledged", { :controller => 'practice_sessions', 
    :id => @practice_session.id}, 
    :method => :put %> 

क्लिक किए जाने पर अनुरोध द्वारा PracticeSessionsController#update

+0

हाय, इसके लिए धन्यवाद। अब मुझे 'नो रूट मैचों'/अभ्यास_ सत्र "मिल रहा है। मुझे लगता है कि ऐसा इसलिए है क्योंकि यह इस मामले में/अभ्यास_ सत्र/26 के बजाय बस/अभ्यास_ सत्रों (जैसे यूआरएल http: // localhost: 3000/practice_sessions? Id = 26) द्वारा देखा गया है। मैं इसके साथ खेलना जारी रखूंगा, लेकिन किसी भी सुझाव की सराहना की! – pakeha

+0

'रेक मार्ग' का उत्पादन क्या है? – zetetic

+0

अपेक्षा के रूप में दिखता है। practice_session PUT /practice_sessions/:id(.:format) {: कार्रवाई => "अद्यतन",: नियंत्रक => "practice_sessions"} practice_sessions पोस्ट/practice_sessions (यहाँ लाइनों मैं कल्पना ब्याज की कर रहे हैं। : प्रारूप) {: action => "create",: नियंत्रक => "अभ्यास_ सत्र"} – pakeha

1

आप स्पष्ट रूप से html_options हैश में :method => :put तर्क पारित करने के लिए आवश्यकता हो सकती है संभाला जाना चाहिए - यह options हैश में globbed हो रही हो सकता है ।

इस प्रयास करें:

<%= button_to "Acknowledged", { :controller => 'practice_sessions', :id => @practice_session.id }, :method => :put %> 

+0

अरे, यह मेरे लिए काम नहीं करेगा (ज़ेटेटिक को मेरी प्रतिक्रिया देखें), लेकिन मैंने नामित मार्गों का उपयोग करके इसे हल कर लिया (मेरा जवाब देखें)। यद्यपि आपके इनपुट के लिए धन्यवाद - मुझे वैसे भी अलग तर्कों को ध्यान में रखना चाहिए था। – pakeha

1

(:controller और :id चारों ओर स्पष्ट ब्रेसिज़ नोट) अंत मैं और अधिक आरामदायक दृष्टिकोण नामित रास्तों का उपयोग कर, जो ठीक से काम करने लगता है के साथ जाने का फैसला किया है। मैं अभी भी 100% निश्चित नहीं हूं कि दूसरी विधि क्यों काम नहीं करेगी, लेकिन मुझे नहीं लगता कि यह महत्वपूर्ण है क्योंकि यह दोनों एक और अधिक स्पष्ट और बी) अधिक पारंपरिक लगता है।

<%= button_to "Acknowledge", practice_session_path(@practice_session), :method => :put %> 
संबंधित मुद्दे