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

मॉड्यूल ActionDispatch :: रूटिंग :: मैपर :: चिंताएं




ruby

मॉड्यूल ActionDispatch :: रूटिंग :: मैपर :: चिंताएं

Routing Concerns आपको उन सामान्य मार्गों की घोषणा करने की अनुमति देता है जो दूसरों के संसाधनों और मार्गों के अंदर पुन: उपयोग किए जा सकते हैं।

concern :commentable do
  resources :comments
end

concern :image_attachable do
  resources :images, only: :index
end

इन चिंताओं का उपयोग Resources मार्ग में किया जाता है:

resources :messages, concerns: [:commentable, :image_attachable]

या एक दायरे या नाम स्थान में:

namespace :posts do
  concerns :commentable
end

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

चिंता (नाम, कॉल करने योग्य = शून्य, और ब्लॉक) दिखाएँ स्रोत
# File actionpack/lib/action_dispatch/routing/mapper.rb, line 2021
def concern(name, callable = nil, &block)
  callable ||= lambda { |mapper, options| mapper.instance_exec(options, &block) }
  @concerns[name] = callable
end

एक नाम का उपयोग करके रूटिंग चिंता को परिभाषित करें।

दूसरे पैरामीटर के रूप में उस ऑब्जेक्ट को पास करके, किसी ब्लॉक का उपयोग करके या किसी अन्य ऑब्जेक्ट द्वारा नियंत्रित इनलाइन को इनलाइन परिभाषित किया जा सकता है।

चिंता की बात है, अगर आपूर्ति की जाती है, तो call जवाब देना चाहिए, जो दो मापदंडों को प्राप्त करेगा:

* The current mapper
* A hash of options which the concern object may use

ब्लॉक पैरामीटर को स्वीकार करके ब्लॉक में परिभाषित चिंताओं से विकल्पों का भी उपयोग किया जा सकता है। तो, एक ब्लॉक का उपयोग करके, आप कुछ के रूप में सरल कर सकते हैं क्योंकि कुछ संसाधनों पर उपलब्ध कार्यों को सीमित करना, चिंता के माध्यम से मानक संसाधन विकल्प पास करना:

concern :commentable do |options|
  resources :comments, options
end

resources :posts, concerns: :commentable
resources :archived_posts do
  # Don't allow comments on archived posts
  concerns :commentable, only: [:index, :show]
end

या, किसी कॉल करने योग्य ऑब्जेक्ट का उपयोग करके, आप अपने एप्लिकेशन के लिए कुछ और विशिष्ट लागू कर सकते हैं, जो आपके रूट फ़ाइल में जगह से बाहर होगा।

# purchasable.rb
class Purchasable
  def initialize(defaults = {})
    @defaults = defaults
  end

  def call(mapper, options = {})
    options = @defaults.merge(options)
    mapper.resources :purchases
    mapper.resources :receipts
    mapper.resources :returns if options[:returnable]
  end
end

# routes.rb
concern :purchasable, Purchasable.new(returnable: true)

resources :toys, concerns: :purchasable
resources :electronics, concerns: :purchasable
resources :pets do
  concerns :purchasable, returnable: false
end

किसी भी रूटिंग हेल्पर्स का उपयोग एक चिंता के अंदर किया जा सकता है। यदि call करने योग्य का उपयोग कर रहे हैं, तो वे call करने के लिए पारित किए गए Mapper से सुलभ हैं।

चिंताओं (* args) स्रोत दिखाएँ
# File actionpack/lib/action_dispatch/routing/mapper.rb, line 2037
def concerns(*args)
  options = args.extract_options!
  args.flatten.each do |name|
    if concern = @concerns[name]
      concern.call(self, options)
    else
      raise ArgumentError, "No concern named #{name} was found!"
    end
  end
end

नामित चिंताओं का उपयोग करें

resources :posts do
  concerns :commentable
end

Concerns उन मार्गों में भी काम करती हैं जिनका आप उपयोग करना चाहते हैं:

namespace :posts do
  concerns :commentable
end