Ruby on Rails 5.2 - ActionController::Metal

वर्ग ActionController :: धातु




ruby

वर्ग ActionController :: धातु

जनक:
AbstractController::Base

ActionController::Metal सबसे सरल संभव नियंत्रक है, ActionController::Base द्वारा प्रदान की गई अतिरिक्त ActionController::Base बिना एक वैध रैक इंटरफेस प्रदान करता है।

एक नमूना धातु नियंत्रक इस तरह दिख सकता है:

class HelloController < ActionController::Metal
  def index
    self.response_body = "Hello World!"
  end
end

और फिर अपने धातु नियंत्रक के अनुरोधों को रूट करने के लिए, आप कुछ इस तरह से config/routes.rb मार्गों को जोड़ेंगे।

get 'hello', to: HelloController.action(:index)

action विधि रेल राउटर को भेजने के लिए एक वैध रैक एप्लिकेशन लौटाती है।

Helpers

ActionController::Metal डिफ़ॉल्ट रूप से ActionController::Metal दृश्य, भाग, या अन्य प्रतिक्रियाओं को स्पष्ट रूप से response_body= , content_type= , और status= कॉल से अलग करने के लिए कोई उपयोगिताओं प्रदान नहीं करता है। एक सामान्य नियंत्रक में आपके द्वारा उपयोग किए जाने वाले रेंडर हेल्पर्स को जोड़ने के लिए, आप निम्न कार्य कर सकते हैं:

class HelloController < ActionController::Metal
  include AbstractController::Rendering
  include ActionView::Layouts
  append_view_path "#{Rails.root}/app/views"

  def index
    render "hello/index"
  end
end

पुनर्निर्देशन Helpers

अपने धातु नियंत्रक में पुनर्निर्देशन सहायकों को जोड़ने के लिए, निम्नलिखित कार्य करें:

class HelloController < ActionController::Metal
  include ActionController::Redirecting
  include Rails.application.routes.url_helpers

  def index
    redirect_to root_url
  end
end

अन्य Helpers

आप ActionController::Base में शामिल मॉड्यूल का उल्लेख कर सकते हैं ActionController::Base अन्य विशेषताओं को देखने के लिए ActionController::Base जो आप अपने धातु नियंत्रक में ला सकते हैं।

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

क्रिया (नाम) स्रोत दिखाएँ
# File actionpack/lib/action_controller/metal.rb, line 232
def self.action(name)
  app = lambda { |env|
    req = ActionDispatch::Request.new(env)
    res = make_response! req
    new.dispatch(name, req, res)
  }

  if middleware_stack.any?
    middleware_stack.build(name, app)
  else
    app
  end
end

दिए गए एक्शन नाम के लिए एक रैक एंडपॉइंट देता है।

कंट्रोलर_नाम () स्रोत दिखाएं
# File actionpack/lib/action_controller/metal.rb, line 129
def self.controller_name
  @controller_name ||= name.demodulize.sub(/Controller$/, "").underscore
end

नियंत्रक के नाम के अंतिम भाग को, बिना अंत Controller वापस लौटाता है। उदाहरण के लिए, पोस्टकंट्रोलर ने posts लौटाए। नाम स्थान छोड़ दिया जाता है, इसलिए व्यवस्थापन :: PostController रिटर्न posts भी करता है।

रिटर्न

  • string

प्रेषण (नाम, रीक, रेस) स्रोत दिखाएँ
# File actionpack/lib/action_controller/metal.rb, line 248
def self.dispatch(name, req, res)
  if middleware_stack.any?
    middleware_stack.build(name) { |env| new.dispatch(name, req, res) }.call req.env
  else
    new.dispatch(name, req, res)
  end
end

नियंत्रक को प्रत्यक्ष प्रेषण। नियंत्रक को त्वरित करता है, फिर नाम name की कार्रवाई निष्पादित करता है।

make_response! (अनुरोध) स्रोत दिखाएँ
# File actionpack/lib/action_controller/metal.rb, line 133
def self.make_response!(request)
  ActionDispatch::Response.new.tap do |res|
    res.request = request
  end
end
मिडलवेयर () स्रोत दिखाएं
# File actionpack/lib/action_controller/metal.rb, line 227
def self.middleware
  middleware_stack
end

middleware_stack लिए उपनाम।

# File actionpack/lib/action_controller/metal.rb, line 153
def initialize
  @_request = nil
  @_response = nil
  @_routes = nil
  super
end
सुपरक्लास विधि कहता है
उपयोग (* आर्ग्स, और ब्लॉक) दिखाएँ स्रोत
# File actionpack/lib/action_controller/metal.rb, line 222
def self.use(*args, &block)
  middleware_stack.use(*args, &block)
end

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

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

कंट्रोलर_नाम () स्रोत दिखाएं
# File actionpack/lib/action_controller/metal.rb, line 144
def controller_name
  self.class.controller_name
end

वर्ग ' controller_name प्रतिनिधि।

# File actionpack/lib/action_controller/metal.rb, line 160
def params
  @_params ||= request.parameters
end
# File actionpack/lib/action_controller/metal.rb, line 164
def params=(val)
  @_params = val
end
प्रदर्शन किया? () स्रोत दिखाएं
# File actionpack/lib/action_controller/metal.rb, line 184
def performed?
  response_body || response.committed?
end

यदि रेंडर या रीडायरेक्ट पहले ही हो चुका है

# File actionpack/lib/action_controller/metal.rb, line 209
def reset_session
  @_request.reset_session
end
response_body = (शरीर) स्रोत दिखाएँ
# File actionpack/lib/action_controller/metal.rb, line 175
def response_body=(body)
  body = [body] unless body.nil? || body.respond_to?(:each)
  response.reset_body!
  return unless body
  response.body = body
  super
end
सुपरक्लास विधि कहता है
# File actionpack/lib/action_controller/metal.rb, line 171
def url_for(string)
  string
end

बेसिक #url_for जिसे अधिक मजबूत कार्यक्षमता के लिए ओवरराइड किया जा सकता है।