Ruby on Rails 5.2 - ActionDispatch::Routing::Mapper::Base

मॉड्यूल ActionDispatch :: रूटिंग :: मैपर :: बेस




ruby

मॉड्यूल ActionDispatch :: रूटिंग :: मैपर :: बेस

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

default_url_options (विकल्प)
इसके लिए उपनाम: default_url_options=
default_url_options = (विकल्प) स्रोत दिखाएं
# File actionpack/lib/action_dispatch/routing/mapper.rb, line 634
def default_url_options=(options)
  @set.default_url_options = options
end
इसके रूप में भी उपनाम: default_url_options
has_named_route? (नाम) स्रोत दिखाएँ
# File actionpack/lib/action_dispatch/routing/mapper.rb, line 646
def has_named_route?(name)
  @set.named_routes.key? name
end

क्वेरी यदि निम्न नामित मार्ग पहले से ही परिभाषित थी।

मिलान (पथ, विकल्प = शून्य) स्रोत दिखाएं
# File actionpack/lib/action_dispatch/routing/mapper.rb, line 582
def match(path, options = nil)
end

एक या अधिक मार्गों के लिए URL पैटर्न से मेल खाता है।

आपको अपने राउटर में match विधि का उपयोग HTTP पद्धति को निर्दिष्ट किए बिना नहीं करना चाहिए।

यदि आप GET और POST दोनों के लिए अपनी कार्रवाई को उजागर करना चाहते हैं, तो उपयोग करें:

# sets :controller, :action and :id in params
match ':controller/:action/:id', via: [:get, :post]

ध्यान दें :controller , :action और :id की व्याख्या URL क्वेरी पैरामीटर के रूप में की जाती है और इस प्रकार यह एक एक्शन में params माध्यम से उपलब्ध है।

यदि आप अपनी कार्रवाई को GET में उजागर करना चाहते हैं, तो राउटर में उपयोग करें:

के बजाय:

match ":controller/:action/:id"

करना:

get ":controller/:action/:id"

इन प्रतीकों में से दो विशेष हैं :controller नक्शे और :action नियंत्रक की कार्रवाई। एक पैटर्न वाइल्डकार्ड सेगमेंट (ग्लब्स) को पार्म्स में भी मैप कर सकता है:

get 'songs/*category/:title', to: 'songs#show'

# 'songs/rock/classic/stairway-to-heaven' sets
#  params[:category] = 'rock/classic'
#  params[:title] = 'stairway-to-heaven'

वाइल्डकार्ड पैरामीटर से मिलान करने के लिए, इसमें एक नाम निर्दिष्ट होना चाहिए। ग्लोब पैरामीटर को संलग्न करने के लिए एक चर नाम के बिना, मार्ग को पार्स नहीं किया जा सकता है।

जब कोई पैटर्न किसी आंतरिक मार्ग की ओर इशारा करता है, तो मार्ग की :action और :controller को विकल्प या हैश शॉर्टहैंड में सेट किया जाना चाहिए। उदाहरण:

match 'photos/:id' => 'photos#show', via: :get
match 'photos/:id', to: 'photos#show', via: :get
match 'photos/:id', controller: 'photos', action: 'show', via: :get

एक पैटर्न एक Rack एंडपॉइंट की ओर भी इशारा कर सकता है, यानी कुछ भी जो call करने के लिए प्रतिक्रिया करता है:

match 'photos/:id', to: -> (hash) { [200, {}, ["Coming soon"]] }, via: :get
match 'photos/:id', to: PhotoRackApp, via: :get
# Yes, controller actions are just rack endpoints
match 'photos/:id', to: PhotosController.action(:show), via: :get

क्योंकि एकल क्रिया के साथ विभिन्न HTTP क्रियाओं का अनुरोध करने के लिए सुरक्षा निहितार्थ हैं, आपको या तो विकल्पों के माध्यम से कार्यों को निर्दिष्ट करना होगा या match बजाय HttpHelpers किसी एक का उपयोग करना होगा

विकल्प

यहां नहीं देखा गया कोई भी विकल्प URL के साथ पाराम के रूप में पास किया गया है।

: नियंत्रक

मार्ग का नियंत्रक।

: कार्रवाई

मार्ग की क्रिया।

: param

डिफ़ॉल्ट संसाधन पहचानकर्ता को ओवरराइड करता है :id (मार्गों को उत्पन्न करने के लिए उपयोग किए जाने वाले डायनामिक सेगमेंट का नाम)। आप params[<:param>] का उपयोग करके अपने सेगमेंट से उस सेगमेंट तक पहुँच सकते हैं । आपके राउटर में:

resources :users, param: :name

यहाँ users संसाधन में इसके लिए उत्पन्न निम्नलिखित मार्ग होंगे:

GET       /users(.:format)
POST      /users(.:format)
GET       /users/new(.:format)
GET       /users/:name/edit(.:format)
GET       /users/:name(.:format)
PATCH/PUT /users/:name(.:format)
DELETE    /users/:name(.:format)

आप URL बनाने के लिए संबंधित मॉडल के ActiveRecord::Base#to_param को ओवरराइड कर सकते हैं:

class User < ActiveRecord::Base
  def to_param
    name
  end
end

user = User.find_by(name: 'Phusion')
user_path(user)  # => "/users/Phusion"
: पथ

मार्गों के लिए पथ उपसर्ग।

: मॉड्यूल

के लिए नामस्थान: नियंत्रक।

match 'path', to: 'c#a', module: 'sekret', controller: 'posts', via: :get
# => Sekret::PostsController

इसके स्कोप समकक्ष के लिए Scoping#namespace देखें।

:जैसा

रूटिंग हेल्पर्स जेनरेट करने के लिए उपयोग किया जाने वाला नाम।

:के जरिए

मार्ग के लिए अनुमत HTTP क्रिया (s)।

match 'path', to: 'c#a', via: :get
match 'path', to: 'c#a', via: [:get, :post]
match 'path', to: 'c#a', via: :all
:सेवा मेरे

एक Rack समापन बिंदु को इंगित करता है। एक वस्तु हो सकती है जो एक नियंत्रक की कार्रवाई का प्रतिनिधित्व करने के लिए call या स्ट्रिंग का जवाब देती है।

match 'path', to: 'controller#action', via: :get
match 'path', to: -> (env) { [200, {}, ["Success!"]] }, via: :get
match 'path', to: RackApp, via: :get
:पर

विशिष्ट विशिष्ट संदर्भ में मार्गों को लपेटने के लिए आशुलिपि। मान्य मान हैं :member , :collection :new और :new । केवल resource(s) ब्लॉक के भीतर का उपयोग करें। उदाहरण के लिए:

resource :bar do
  match 'foo', to: 'c#a', on: :member, via: [:get, :post]
end

के बराबर है:

resource :bar do
  member do
    match 'foo', to: 'c#a', via: [:get, :post]
  end
end
: की कमी

नियमित अभिव्यक्ति के एक हैश या matches? प्रतिक्रिया देने वाली वस्तु के साथ कसैले पैरामीटर matches? । इसके अलावा, पथ के अलावा अन्य बाधाओं को भी किसी भी वस्तु के साथ निर्दिष्ट किया जा सकता है जो === (जैसे। String , Array , Range , आदि) के प्रति प्रतिक्रिया करता है।

match 'path/:id', constraints: { id: /[A-Z]\d{5}/ }, via: :get

match 'json_only', constraints: { format: 'json' }, via: :get

class Whitelist
  def matches?(request) request.remote_ip == '1.2.3.4' end
end
match 'path', to: 'c#a', constraints: Whitelist.new, via: :get

इसके दायरे के समतुल्य अधिक उदाहरणों के लिए Scoping#constraints को देखें।

: चूक

मापदंडों के लिए चूक निर्धारित करता है

# Sets params[:format] to 'jpg' by default
match 'path', to: 'c#a', defaults: { format: 'jpg' }, via: :get

इसके दायरे के लिए Scoping#defaults देखें।

: लंगर

बूलियन एक match पैटर्न को लंगर करने के लिए। डिफ़ॉल्ट सत्य है। जब गलत पर सेट किया जाता है, तो पैटर्न दिए गए पथ के साथ उपसर्ग किए गए किसी भी अनुरोध से मेल खाता है।

# Matches any request starting with 'path'
match 'path', to: 'c#a', anchor: false, via: :get
: प्रारूप

आपको वैकल्पिक format खंड के लिए डिफ़ॉल्ट मान निर्दिष्ट करने या false आपूर्ति करके इसे अक्षम करने की अनुमति देता है।

माउंट (एप्लिकेशन, विकल्प = शून्य) स्रोत दिखाएं
# File actionpack/lib/action_dispatch/routing/mapper.rb, line 604
        def mount(app, options = nil)
          if options
            path = options.delete(:at)
          elsif Hash === app
            options = app
            app, path = options.find { |k, _| k.respond_to?(:call) }
            options.delete(app) if app
          end

          raise ArgumentError, "A rack application must be specified" unless app.respond_to?(:call)
          raise ArgumentError, <<-MSG.strip_heredoc unless path
            Must be called with mount point

              mount SomeRackApp, at: "some_route"
              or
              mount(SomeRackApp => "some_route")
          MSG

          rails_app = rails_app? app
          options[:as] ||= app_name(app, rails_app)

          target_as       = name_for_action(options[:as], path)
          options[:via] ||= :all

          match(path, options.merge(to: app, anchor: false, format: false))

          define_generate_prefix(app, target_as) if rails_app
          self
        end

अनुप्रयोग के भीतर उपयोग किए जाने वाले रैक-आधारित अनुप्रयोग को माउंट करें।

mount SomeRackApp, at: "some_route"

वैकल्पिक रूप से:

mount(SomeRackApp => "some_route")

विकल्पों के लिए, match देखें, क्योंकि mount आंतरिक रूप से इसका उपयोग करता है।

सभी माउंटेड एप्लिकेशन उन्हें एक्सेस करने के लिए रूटिंग हेल्पर्स के साथ आते हैं। ये निर्दिष्ट वर्ग के नाम पर हैं, इसलिए उपर्युक्त उदाहरण के लिए सहायक या तो some_rack_app_path या some_rack_app_url । इस सहायक के नाम को अनुकूलित करने के लिए, विकल्प के :as इसका उपयोग करें:

mount(SomeRackApp => "some_route", as: "exciting")

यह रोमांचक_पैथ और रोमांचक_उरल सहायक उत्पन्न करेगा जिसका उपयोग इस घुड़सवार ऐप पर नेविगेट करने के लिए किया जा सकता है।

with_default_scope (कार्यक्षेत्र, और ब्लॉक) दिखाएँ स्रोत
# File actionpack/lib/action_dispatch/routing/mapper.rb, line 639
def with_default_scope(scope, &block)
  scope(scope) do
    instance_exec(&block)
  end
end