Module: ActionController::Renderers::ClassMethods
- Defined in:
- lib/action_controller/metal/renderers.rb
Instance Method Summary collapse
-
#use_renderers(*args) ⇒ Object
(also: #use_renderer)
Adds, by name, a renderer or renderers to the ‘_renderers` available to call within controller actions.
Instance Method Details
#use_renderers(*args) ⇒ Object Also known as: use_renderer
Adds, by name, a renderer or renderers to the ‘_renderers` available to call within controller actions.
It is useful when rendering from an ActionController::Metal controller or otherwise to add an available renderer proc to a specific controller.
Both ActionController::Base and ActionController::API include ActionController::Renderers::All, making all renderers available in the controller. See Renderers::RENDERERS and Renderers.add.
Since ActionController::Metal controllers cannot render, the controller must include AbstractController::Rendering, ActionController::Rendering, and ActionController::Renderers, and have at least one renderer.
Rather than including ActionController::Renderers::All and including all renderers, you may specify which renderers to include by passing the renderer name or names to ‘use_renderers`. For example, a controller that includes only the `:json` renderer (`_render_with_renderer_json`) might look like:
class MetalRenderingController < ActionController::Metal
include AbstractController::Rendering
include ActionController::Rendering
include ActionController::Renderers
use_renderers :json
def show
render json: record
end
end
You must specify a ‘use_renderer`, else the `controller.renderer` and `controller._renderers` will be `nil`, and the action will fail.
129 130 131 132 |
# File 'lib/action_controller/metal/renderers.rb', line 129 def use_renderers(*args) renderers = _renderers + args self._renderers = renderers.freeze end |