Ruby on Rails 5.2 - ActionController::Renderers

मॉड्यूल एक्शनकंट्रोलर :: रेंडरर्स




ruby

मॉड्यूल एक्शनकंट्रोलर :: रेंडरर्स

स्थिरांक

दाता

रेंडरर नामों वाला एक सेट जो उपलब्ध रेंडर प्रोक्स के अनुरूप है। डिफ़ॉल्ट मान हैं :json :js :xml

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

_render_with_renderer_method_name (कुंजी) स्रोत दिखाएं
# File actionpack/lib/action_controller/metal/renderers.rb, line 91
def self._render_with_renderer_method_name(key)
  "_render_with_renderer_#{key}"
end
जोड़ें (कुंजी, और ब्लॉक) दिखाएँ स्रोत
# File actionpack/lib/action_controller/metal/renderers.rb, line 75
def self.add(key, &block)
  define_method(_render_with_renderer_method_name(key), &block)
  RENDERERS << key.to_sym
end

नियंत्रक कार्यों के भीतर कॉल करने के लिए एक नया रेंडरर जोड़ता है। एक रेंडरर को अपने नाम को AbstractController::Rendering#render विकल्प के रूप में पास करके मंगवाया जाता है। रेंडर बनाने के लिए इसे एक नाम और एक ब्लॉक पास करें। ब्लॉक दो तर्क लेता है, पहला इसकी कुंजी के साथ रखा गया मूल्य है और दूसरा render करने के render दिए गए विकल्पों का शेष हैश है।

एक csv रेंडरर बनाएँ:

ActionController::Renderers.add :csv do |obj, options|
  filename = options[:filename] || 'data'
  str = obj.respond_to?(:to_csv) ? obj.to_csv : obj.to_s
  send_data str, type: Mime[:csv],
    disposition: "attachment; filename=#{filename}.csv"
end

ध्यान दें कि हमने माइम को csv माइम प्रकार के लिए उपयोग किया है क्योंकि यह रेल के साथ आता है। एक कस्टम रेंडर के लिए, आपको माइम के साथ एक माइम प्रकार दर्ज करना होगा Mime::Type.register

कंट्रोलर एक्शन में csv रेंडरर का उपयोग करने के लिए:

def show
  @csvable = Csvable.find(params[:id])
  respond_to do |format|
    format.html
    format.csv { render csv: @csvable, filename: @csvable.name }
  end
end
निकालें (कुंजी) दिखाएँ स्रोत
# File actionpack/lib/action_controller/metal/renderers.rb, line 85
def self.remove(key)
  RENDERERS.delete(key.to_sym)
  method_name = _render_with_renderer_method_name(key)
  remove_possible_method(method_name)
end

यह विधि ऐड मेथड के विपरीत है।

Csv रेंडरर को हटाने के लिए:

ActionController::Renderers.remove(:csv)

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

_render_to_body_with_renderer (विकल्प) स्रोत दिखाएं
# File actionpack/lib/action_controller/metal/renderers.rb, line 145
def _render_to_body_with_renderer(options)
  _renderers.each do |name|
    if options.key?(name)
      _process_options(options)
      method_name = Renderers._render_with_renderer_method_name(name)
      return send(method_name, options.delete(name), options)
    end
  end
  nil
end
रेंडर_टो_बॉडी (विकल्प) स्रोत दिखाएं
# File actionpack/lib/action_controller/metal/renderers.rb, line 141
def render_to_body(options)
  _render_to_body_with_renderer(options) || super
end

AbstractController::Rendering में render करके कॉल किया जाता है जो response_body मान के रूप में रिटर्न वैल्यू सेट करता है।

यदि कोई रेंडर नहीं मिला है, तो ActionView::Rendering.render_to_body को super रिटर्न नियंत्रित करता है, यदि मौजूद है।

सुपरक्लास विधि कहता है