Ruby on Rails 5.2 - ActionController::Redirecting

मॉड्यूल एक्शनकंट्रोलर :: पुनर्निर्देशन




ruby

मॉड्यूल एक्शनकंट्रोलर :: पुनर्निर्देशन

शामिल मॉड्यूल:
ActionController::UrlFor

सार्वजनिक प्रवृत्ति के तरीके

redirect_back (fallback_location :, allow_other_host: true, ** args) स्रोत दिखाएं
# File actionpack/lib/action_controller/metal/redirecting.rb, line 90
def redirect_back(fallback_location:, allow_other_host: true, **args)
  referer = request.headers["Referer"]
  redirect_to_referer = referer && (allow_other_host || _url_host_allowed?(referer))
  redirect_to redirect_to_referer ? referer : fallback_location, **args
end

यदि संभव हो तो अनुरोध (संदर्भकर्ता) जारी करने वाले पृष्ठ पर ब्राउज़र को पुनर्निर्देशित करें, अन्यथा प्रदान किए गए डिफ़ॉल्ट फ़ॉलबैक स्थान पर रीडायरेक्ट करता है।

संदर्भ जानकारी को अनुरोध पर HTTP Referer (सिक) हेडर से खींचा जाता है। यह एक वैकल्पिक हेडर है और अनुरोध पर इसकी उपस्थिति ब्राउज़र सुरक्षा सेटिंग्स और उपयोगकर्ता प्राथमिकताओं के अधीन है। यदि अनुरोध इस शीर्षक को याद कर रहा है, तो fallback_location का उपयोग किया जाएगा।

redirect_back fallback_location: { action: "show", id: 5 }
redirect_back fallback_location: @post
redirect_back fallback_location: "http://www.rubyonrails.org"
redirect_back fallback_location: "/images/screenshot.jpg"
redirect_back fallback_location: posts_url
redirect_back fallback_location: proc { edit_post_url(@post) }
redirect_back fallback_location: '/', allow_other_host: false

विकल्प

  • :fallback_location - वह डिफ़ॉल्ट फ़ॉलबैक स्थान जिसका उपयोग लापता Referer शीर्षलेख पर किया जाएगा।

  • :allow_other_host - उस होस्ट को पुनर्निर्देशन की अनुमति दें या अस्वीकार करें जो वर्तमान होस्ट से भिन्न है, सत्य के लिए डिफ़ॉल्ट है।

अन्य सभी विकल्प जिन्हें redirect_to किया जा सकता है_ को विकल्प के रूप में स्वीकार किया जाता है और व्यवहार समान है।

redirect_to (विकल्प = {}, response_status = {}) स्रोत दिखाएं
# File actionpack/lib/action_controller/metal/redirecting.rb, line 58
def redirect_to(options = {}, response_status = {})
  raise ActionControllerError.new("Cannot redirect to nil!") unless options
  raise AbstractController::DoubleRenderError if response_body

  self.status        = _extract_redirect_to_status(options, response_status)
  self.location      = _compute_redirect_to_location(request, options)
  self.response_body = "<html><body>You are being <a href=\"#{ERB::Util.unwrapped_html_escape(response.location)}\">redirected</a>.</body></html>"
end

ब्राउज़र को options में निर्दिष्ट लक्ष्य पर पुनर्निर्देशित करता है। यह पैरामीटर किसी भी एक हो सकता है:

  • Hash - options साथ url_for कॉल करके URL जनरेट किया जाएगा।

  • Record - URL url_for options साथ कॉल करके उत्पन्न किया जाएगा, जो उस रिकॉर्ड के लिए एक नामित URL का संदर्भ देगा।

  • String protocol:// साथ शुरू protocol:// (जैसे http:// ) या एक प्रोटोकॉल सापेक्ष संदर्भ (जैसे // ) - रीडायरेक्शन के लिए लक्ष्य के रूप में सीधे गुजरता है।

  • String प्रोटोकॉल नहीं है - वर्तमान प्रोटोकॉल और होस्ट स्ट्रिंग के लिए तैयार है।

  • Proc - एक ब्लॉक जिसे नियंत्रक के संदर्भ में निष्पादित किया जाएगा। redirect_to द्वारा स्वीकार किए गए किसी भी विकल्प को वापस करना चाहिए।

उदाहरण:

redirect_to action: "show", id: 5
redirect_to @post
redirect_to "http://www.rubyonrails.org"
redirect_to "/images/screenshot.jpg"
redirect_to posts_url
redirect_to proc { edit_post_url(@post) }

पुनर्निर्देशन एक 302 Found हेडर के रूप में होता है जब तक कि अन्यथा का उपयोग करके निर्दिष्ट न किया गया हो :status विकल्प:

redirect_to post_url(@post), status: :found
redirect_to action: 'atom', status: :moved_permanently
redirect_to post_url(@post), status: 301
redirect_to action: 'atom', status: 302

स्टेटस कोड या तो पूर्णांक के रूप में एक मानक HTTP स्टेटस कोड हो सकता है, या डाउनडेस, अंडरस्कोर और सिंबल विवरण का प्रतिनिधित्व करने वाला प्रतीक हो सकता है। ध्यान दें कि स्थिति कोड 3xx HTTP कोड होना चाहिए, या पुनर्निर्देशन नहीं होगा।

यदि आप GET या POST के अलावा XHR अनुरोधों का उपयोग कर रहे हैं और अनुरोध के बाद पुनर्निर्देशित कर रहे हैं तो कुछ ब्राउज़र मूल अनुरोध विधि का उपयोग करके पुनर्निर्देशित करेंगे। इससे अवांछनीय व्यवहार हो सकता है जैसे कि डबल DELETE। इसके आस-पास काम करने के लिए आप एक 303 See Other स्थिति कोड वापस कर सकते हैं जिसे GET अनुरोध का उपयोग करके किया जाएगा।

redirect_to posts_url, status: :see_other
redirect_to action: 'index', status: 303

पुनर्निर्देशन के हिस्से के रूप में एक फ्लैश संदेश असाइन करना भी संभव है। आमतौर पर उपयोग किए जाने वाले फ्लैश नामों के लिए दो विशेष एक्सेसर्स alert और notice साथ-साथ एक सामान्य उद्देश्य flash बकेट भी हैं।

redirect_to post_url(@post), alert: "Watch it, mister!"
redirect_to post_url(@post), status: :found, notice: "Pay attention to the road"
redirect_to post_url(@post), status: 301, flash: { updated_post_id: @post.id }
redirect_to({ action: 'atom' }, alert: "Something serious happened")

हमारे कंट्रोलर में redirect_to बाद स्टेटमेंट निष्पादित हो जाते हैं, इसलिए redirect_to फ़ंक्शन को निष्पादित करना बंद नहीं करता है। redirect_to तुरंत बाद फ़ंक्शन के निष्पादन को समाप्त करने के redirect_to , वापसी का उपयोग करें।

redirect_to post_url(@post) and return