रेल में मापदंडों को पुनर्निर्देशित करना


201

हम पटरियों में redirect_to में पैरामीटर कैसे पास करते हैं? मुझे पता है कि हम इसका उपयोग करके आईडी पास कर सकते हैं:

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

अगर मैं कुछ फॉर्म डेटा जैसे अतिरिक्त मापदंडों को पारित करना चाहता हूं तो इसे कैसे प्राप्त करें?

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

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

redirect_to action: action_name, id: 3

3
क्या आप वास्तव में पूरा करने की कोशिश कर रहे हैं? क्या आपने सत्र में डेटा को बचाने पर विचार किया है?
माइकल सेपकोट

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

जवाबों:


174

बस उन्हें विकल्पों में जोड़ें:

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

उपज होगी /thing/3/edit?something=else


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

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

थम्स अप। मैं 1 घंटे से इसकी तलाश कर रहा हूं।

86

यदि आप 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')

46

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

redirect_to act_house_path(request.parameters)


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

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

3
आप विलय के बाद अवांछित पारमों को बाहर करने के लिए छोड़कर विधि का उपयोग कर सकते हैं:redirect_to act_house_path(request.parameters.except(:authenticity_token, :controller, :action, :utf8, :commit)
श्री io

39

आप फ़्लैश पैरामीटर के साथ टेम्पलेट के लिए मनमाना ऑब्जेक्ट पास कर सकते हैं।

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

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

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

63
यह घटिया प्रथा है। यह विधि फ्लैश ऑब्जेक्ट का दुरुपयोग करती है, इसका उद्देश्य उपयोगकर्ता संदेश के लिए है। बेहतर होगा कि सत्र में मनमाने मापदंडों को संग्रहीत किया जाए और फिर जब आप काम कर लें तब सत्र से उन मापदंडों को साफ़ करें।
ग्रेग


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

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

7

यदि आप अतिरिक्त URL पैरामीटर (नियंत्रक, क्रिया, आईडी इत्यादि) पास करने के लिए कोई रास्ता खोज रहे हैं, तो यह करने के लिए एक मजबूत तरीका है:

object_path(@object, params: request.query_parameters)

यूटीएम मापदंडों या किसी भी अन्य अतिरिक्त पैरामेट्स के साथ आप जो खोना नहीं चाहते हैं, वह गुजर जाएगा ।


4

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" 

3

अपना रास्ता, और ले params, और वापस जाने के लिए:

redirect_to controller: "client", action: "get_name", params: request.query_parameters and return
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.