Ruby on Rails 5.2 - ActionDispatch::Routing::Redirection

मॉड्यूल ActionDispatch :: रूटिंग :: पुनर्निर्देशन




ruby

मॉड्यूल ActionDispatch :: रूटिंग :: पुनर्निर्देशन

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

रीडायरेक्ट (* आर्ग्स, और ब्लॉक) शो स्रोत
# File actionpack/lib/action_dispatch/routing/redirection.rb, line 187
def redirect(*args, &block)
  options = args.extract_options!
  status  = options.delete(:status) || 301
  path    = args.shift

  return OptionRedirect.new(status, options) if options.any?
  return PathRedirect.new(status, path) if String === path

  block = path if path.respond_to? :call
  raise ArgumentError, "redirection argument not supported" unless block
  Redirect.new status, block
end

किसी भी पथ को दूसरे पथ पर पुनर्निर्देशित करें:

get "/stories" => redirect("/posts")

यह अनुरोध के कुछ हिस्सों को अनदेखा करते हुए उपयोगकर्ता को पुनर्निर्देशित करेगा, जिसमें क्वेरी स्ट्रिंग, आदि /stories , /stories?foo=bar , आदि सभी पुनर्निर्देशित /posts

आप प्रदत्त पुनर्निर्देशन में प्रक्षेप का उपयोग भी कर सकते हैं:

get 'docs/:article', to: redirect('/wiki/%{article}')

ध्यान दें कि यदि आप एक अग्रणी स्लैश के बिना एक पथ वापस करते हैं तो URL वर्तमान SCRIPT_NAME परिवेश चर के साथ उपसर्ग करता है। यह आमतौर पर '/' है, लेकिन एक माउंट किए गए इंजन में भिन्न हो सकता है या जहां एप्लिकेशन को किसी वेबसाइट के उपनिर्देशिका में तैनात किया जाता है।

वैकल्पिक रूप से आप अन्य सिंटैक्स का उपयोग कर सकते हैं:

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

get 'jokes/:number', to: redirect { |params, request|
  path = (params[:number].to_i.even? ? "wheres-the-beef" : "i-love-lamp")
  "http://#{request.host_with_port}/#{path}"
}

ध्यान दें कि पुनर्निर्देशित ब्लॉक के लिए + डू एंड + सिंटैक्स काम नहीं करेगा, क्योंकि रूबी redirect बजाय ब्लॉक get करेगा। इसके बजाय { ... } उपयोग करें।

पुनर्निर्देश का विकल्प संस्करण आपको केवल URL के कुछ हिस्सों की आपूर्ति करने की अनुमति देता है जिन्हें बदलने की आवश्यकता होती है, यह पहले उदाहरण के समान पथ के प्रक्षेप का भी समर्थन करता है।

get 'stores/:name',       to: redirect(subdomain: 'stores', path: '/%{name}')
get 'stores/:name(*all)', to: redirect(subdomain: 'stores', path: '/%{name}%{all}')
get '/stories', to: redirect(path: '/posts')

यह अनुरोध के केवल निर्दिष्ट भागों को बदलते हुए उपयोगकर्ता को पुनर्निर्देशित करेगा, उदाहरण के लिए अंतिम उदाहरण में path विकल्प। /stories , /stories?foo=bar , क्रमशः /posts और /posts?foo=bar क्रमशः।

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

get 'accounts/:name' => redirect(SubdomainRedirector.new('api'))