Ruby on Rails 5.2 - AbstractController::Base

वर्ग AbstractController :: बेस




ruby

वर्ग AbstractController :: बेस

जनक:
Object
शामिल मॉड्यूल:
ActiveSupport::Configurable

AbstractController::Base एक निम्न-स्तरीय एपीआई है। किसी को भी इसका सीधे उपयोग नहीं करना चाहिए, और उपवर्ग (जैसे ActionController::Base ) से अपेक्षा की जाती है कि वे अपनी स्वयं की render विधि render , क्योंकि प्रतिपादन का अर्थ संदर्भ के आधार पर अलग-अलग चीजें हैं।

गुण

अमूर्त [R]
सार? [आर]

पब्लिक क्लास के तरीके

# File actionpack/lib/abstract_controller/base.rb, line 40
def abstract!
  @abstract = true
end

एक नियंत्रक को सार के रूप में परिभाषित करें। अधिक जानकारी के लिए देखें ::internal_methods

# File actionpack/lib/abstract_controller/base.rb, line 74
def action_methods
  @action_methods ||= begin
    # All public instance methods of this class, including ancestors
    methods = (public_instance_methods(true) -
      # Except for public instance methods of Base and its ancestors
      internal_methods +
      # Be sure to include shadowed public instance methods of this class
      public_instance_methods(false)).uniq.map(&:to_s)

    methods.to_set
  end
end

विधि नामों की एक सूची जिसे कार्रवाई माना जाना चाहिए। इसमें नियंत्रक पर सभी सार्वजनिक आवृत्ति विधियाँ शामिल हैं, किसी भी आंतरिक विधियाँ (देखें ::internal_methods ), किसी भी तरीके से वापस जोड़ना जो आंतरिक हैं, लेकिन अभी भी वर्ग पर ही मौजूद हैं।

रिटर्न

  • Set - सभी तरीकों का एक सेट जिसे कार्रवाई माना जाना चाहिए।

clear_action_methods! () स्रोत दिखाएं
# File actionpack/lib/abstract_controller/base.rb, line 90
def clear_action_methods!
  @action_methods = nil
end

::action_methods कैश किए ::action_methods हैं और कभी-कभी उन्हें ताज़ा करने की आवश्यकता होती है। ::clear_action_methods! आपको ऐसा करने की अनुमति देता है, इसलिए अगली बार जब आप ::action_methods चलाते हैं, तो उन्हें पुनर्गणना होगी।

नियंत्रक_पथ () स्रोत दिखाएं
# File actionpack/lib/abstract_controller/base.rb, line 104
def controller_path
  @controller_path ||= name.sub(/Controller$/, "".freeze).underscore unless anonymous?
end

पूर्ण नियंत्रक नाम लौटाता है, बिना अंत नियंत्रक के।

class MyApp::MyPostsController < AbstractController::Base

end

MyApp::MyPostsController.controller_path # => "my_app/my_posts"

रिटर्न

  • String

# File actionpack/lib/abstract_controller/base.rb, line 59
def internal_methods
  controller = self

  controller = controller.superclass until controller.abstract?
  controller.public_instance_methods(true)
end

नियंत्रक के लिए सभी आंतरिक विधियों की एक सूची। यह एक नियंत्रक का पहला सार सुपरक्लास पाता है, और उस सार वर्ग पर सभी सार्वजनिक उदाहरण विधियों की एक सूची प्राप्त करता है। एक नियंत्रक के सार्वजनिक उदाहरण के तरीकों को आमतौर पर कार्रवाई के तरीके माना जाएगा, इसलिए अमूर्त वर्गों पर घोषित तरीकों को हटाया जा रहा है। ( ActionController::Metal और ActionController::Base को सार के रूप में परिभाषित किया गया है)

method_added (नाम) स्रोत दिखाएं
# File actionpack/lib/abstract_controller/base.rb, line 109
def method_added(name)
  super
  clear_action_methods!
end

कैश्ड को रीफ़्रेश करें ::action_methods जब नया एक्शन_मेथोड जोड़ा जाता है तो एक्शन_मेथोड्स।

सुपरक्लास विधि कहता है
# File actionpack/lib/abstract_controller/base.rb, line 172
def self.supports_path?
  true
end

सही है अगर दिए गए नियंत्रक एक पथ प्रदान करने में सक्षम है। AbstractController::Base का एक उपवर्ग AbstractController::Base गलत वापस आ सकता है। उदाहरण के लिए एक ईमेल नियंत्रक केवल पूर्ण URL के पथ का समर्थन नहीं करता है।

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

# File actionpack/lib/abstract_controller/base.rb, line 143
def action_methods
  self.class.action_methods
end

वर्ग के प्रतिनिधि ' ::action_methods

# File actionpack/lib/abstract_controller/base.rb, line 25
attr_internal :action_name

यह नियंत्रक जिस क्रिया को संसाधित कर रहा है उसका नाम देता है।

available_action? (action_name) स्रोत दिखाएं
# File actionpack/lib/abstract_controller/base.rb, line 157
def available_action?(action_name)
  _find_action_name(action_name)
end

सही है अगर कार्रवाई के लिए एक विधि उपलब्ध है और अन्यथा, झूठी भेजा जा सकता है।

ध्यान दें कि action_methods.include?("foo") गलत और action_methods.include?("foo") लौटा सकती है; available_action?("foo") सही है क्योंकि यह विधि उन कार्यों पर विचार करती है जो अन्य साधनों के माध्यम से भी उपलब्ध हैं, उदाहरण के लिए, निहितार्थ।

पैरामीटर

  • action_name - परीक्षण की जाने वाली क्रिया का नाम

नियंत्रक_पथ () स्रोत दिखाएं
# File actionpack/lib/abstract_controller/base.rb, line 138
def controller_path
  self.class.controller_path
end

वर्ग के प्रतिनिधि ' ::controller_path

# File actionpack/lib/abstract_controller/base.rb, line 29
attr_internal :formats

नियंत्रक द्वारा संसाधित किए जा सकने वाले स्वरूपों को लौटाता है।

प्रदर्शन किया? () स्रोत दिखाएं
# File actionpack/lib/abstract_controller/base.rb, line 164
def performed?
  response_body
end

प्रतिक्रिया शरीर सेट होने पर टेस्ट। यह निर्धारित करने के लिए उपयोग किया जाता है कि क्या process_action कॉलबैक को AbstractController::Callbacks में समाप्त करने की आवश्यकता है।

प्रक्रिया (क्रिया, * args) स्रोत दिखाएँ
# File actionpack/lib/abstract_controller/base.rb, line 125
def process(action, *args)
  @_action_name = action.to_s

  unless action_name = _find_action_name(@_action_name)
    raise ActionNotFound, "The action '#{action}' could not be found for #{self.class.name}"
  end

  @_response_body = nil

  process_action(action_name, *args)
end

पूरे एक्शन डिस्पैच स्टैक के माध्यम से होने वाली कार्रवाई को कॉल करता है।

वास्तविक विधि जिसे कॉल किया जाता है, उसे पद्धति_for_action कहकर निर्धारित किया जाता है। यदि कोई विधि क्रिया को संभाल नहीं सकती है, तो एक AbstractController::ActionNotFound त्रुटि को उठाया जाता है।

रिटर्न

  • self

# File actionpack/lib/abstract_controller/base.rb, line 21
attr_internal :response_body

नियंत्रक द्वारा भेजे गए HTTP प्रतिक्रिया का मुख्य भाग लौटाता है।