2009-09-16 17 views
171

हम रेलवे में रीडायरेक्ट_ में पैरामीटर कैसे पास करते हैं? मैं जानता हूँ कि हम इस का उपयोग करते हुए आईडी पारित कर सकते हैं:रेल में रीडायरेक्ट पैरामीटर रीडायरेक्ट_to

redirect_to :action => action_name,:id => 3 

अगर मैं किसी न किसी रूप डेटा की तरह अतिरिक्त पैरामीटर पास करना चाहते हैं कि यह कैसे प्राप्त करने के लिए?

संपादित करें:

रूबी 2 वाक्य रचना के लिए आप स्निपेट को अपडेट करने के ऊपर करने के लिए है:

redirect_to action: action_name, id: 3 
+3

आप वास्तव में पूरा करने के लिए कोशिश कर रहे हैं? क्या आपने सत्र में डेटा को सहेजने पर विचार किया है? –

+1

जो आप पूछ रहे हैं वह संभव नहीं है - यदि आप रीडायरेक्ट कर रहे हैं, तो यह एक GET अनुरोध होना चाहिए जिसे आप रीडायरेक्ट कर रहे हैं, इसलिए पैराम्स हमेशा आपके उपयोगकर्ताओं के लिए दृश्यमान होंगे। आपको इसके बजाय सत्र में सामान स्टोर करना चाहिए। – GregT

उत्तर

146

बस उन्हें विकल्पों को संलग्न:

redirect_to controller: 'thing', action: 'edit', id: 3, something: 'else' 

/thing/3/edit?something=else

उपज हैं
+5

लेकिन मैं नहीं चाहता कि यह उपयोगकर्ता के लिए दृश्यमान हो .... – markiv

+14

आप एक पोस्ट के साथ रीडायरेक्ट नहीं कर सकते हैं। 3xx परिभाषाओं के तहत HTTP 1.1 दस्तावेज़ों से: "उपयोगकर्ता द्वारा एजेंट के साथ बातचीत किए बिना आवश्यक कार्रवाई की जा सकती है यदि केवल दूसरे अनुरोध में उपयोग की जाने वाली विधि GET या HEAD है।" जो आप वास्तव में पूरा करने की कोशिश कर रहे हैं उस पर विस्तार करें और हम शायद आपको सही दिशा में धक्का दे सकते हैं। – jdl

+0

हाय आपकी प्रतिक्रिया के लिए बहुत बहुत धन्यवाद। मैं वेब विकास के लिए एक नौसिखिया हूँ। मैं एक कार्रवाई करने के लिए विभिन्न तरीकों को जानने की कोशिश कर रहा हूं। आपकी प्रतिक्रिया ने मेरे कई संदेहों को स्पष्ट किया है। फिर से धन्यवाद :)) – markiv

68

यदि आप RESTful संसाधनों का उपयोग कर रहे हैं तो आप निम्न कर सकते हैं:

redirect_to action_name_resource_path(resource_object, param_1: 'value_1', param_2: 'value_2') 

or 
#You can also use the object_id instead of the object 
redirect_to action_name_resource_path(resource_object_id, param_1: 'value_1', param_2: 'value_2') 

or 
#if its a collection action like index, you can omit the id as follows 
redirect_to action_name_resource_path(param_1: 'value_1', param_2: 'value_2') 

#An example with nested resource is as follows: 
redirect_to edit_user_project_path(@user, @project, param_1: 'value_1', param_2: 'value_2') 
38

आप फ़्लैश पैरामीटर के साथ टेम्पलेट के लिए मनमाने ढंग से वस्तुओं पारित कर सकते हैं।

redirect_to :back, flash: {new_solution_errors: solution.errors} 

और फिर हैश के माध्यम से टेम्पलेट में उन्हें एक्सेस करें।

<% flash[:new_solution_errors].each do |err| %> 
+54

यह खराब अभ्यास है। यह विधि फ़्लैश ऑब्जेक्ट का दुरुपयोग करती है, जिसका उद्देश्य उपयोगकर्ता संदेश के लिए है। सत्र में मनमानी पैरामीटर स्टोर करना बेहतर होगा और फिर जब आप पूरा कर लें तो सत्र से उन पैरामीटर को साफ़ करें। – GregT

6
redirect_to :controller => "controller_name", :action => "action_name", :id => x.id 
+6

क्या आप कुछ और स्पष्टीकरण प्रदान कर सकते हैं। बस एक कोड उदाहरण वास्तव में पर्याप्त नहीं है। – simonmenke

38

आप घर # कार्रवाई के लिए भेजा उदाहरण के लिए किसी न किसी रूप डेटा है, तो अब आप उन्हें रीडायरेक्ट करने के लिए # अधिनियम के घर में मानकों को कायम रखते हुए चाहते हैं, तो आप इस

redirect_to act_house_path(request.parameters)

कर सकते हैं
+1

क्या आप जानते हैं कि आप इसे कैसे जोड़ेंगे, साथ ही नए पैरामीटर? यानी अनुरोध। पैरामीटर, (या +): यह =>: –

+4

आप मर्ज विधि का उपयोग कर सकते हैं। उदाहरण के लिए: 'redirect_to act_house_path (request.parameters.merge (key:" value "))' – GregT

+1

विलय के बाद अवांछित पैरा को बाहर करने के लिए आप को छोड़कर विधि का उपयोग भी कर सकते हैं: 'redirect_to_path (request.parameters.except (request.parameters.except (: authenticity_token,: नियंत्रक,: कार्रवाई,: utf8,: प्रतिबद्ध) ' –

22
redirect_to new_user_path(:id => 1, :contact_id => 3, :name => 'suleman') 
3

routes.rb

match 'controller_name/action_name' => 'controller_name#action_name', via: [:get, :post], :as => :abc 

किसी भी नियंत्रक आप मानकों के साथ रीडायरेक्ट करना चाहते हैं नीचे दिए गए हैं:

redirect_to abc_path(@abc, id: @id), :notice => "message fine" 
संबंधित मुद्दे