Renderer
ActionController::Renderer allows you to render arbitrary templates without being inside a controller action.
You can get a renderer instance by calling renderer on a controller class:
ApplicationController.renderer PostsController.renderer
and render a template by calling the render method:
ApplicationController.renderer.render template: "posts/show", assigns: { post: Post.first }
PostsController.renderer.render :show, assigns: { post: Post.first }
As a shortcut, you can also call render directly on the controller class itself:
ApplicationController.render template: "posts/show", assigns: { post: Post.first }
PostsController.render :show, assigns: { post: Post.first }
# File actionpack/lib/action_controller/renderer.rb, line 64 def self.for(controller, env = nil, defaults = DEFAULTS) new(controller, env, defaults) end
Creates a new renderer using the given controller class. See ::new.
# File actionpack/lib/action_controller/renderer.rb, line 111
def initialize(controller, env, defaults)
@controller = controller
@defaults = defaults
if env.blank? && @defaults == DEFAULTS
@env = DEFAULT_ENV
else
@env = normalize_env(@defaults)
@env.merge!(normalize_env(env)) unless env.blank?
end
end Initializes a new Renderer.
Parameterscontroller - The controller class to instantiate for rendering.
env - The Rack env to use for mocking a request when rendering. Entries can be typical Rack env keys and values, or they can be any of the following, which will be converted appropriately:
:http_host - The HTTP host for the incoming request. Converts to Rack’s HTTP_HOST.
:https - Boolean indicating whether the incoming request uses HTTPS. Converts to Rack’s HTTPS.
:method - The HTTP method for the incoming request, case-insensitive. Converts to Rack’s REQUEST_METHOD.
:script_name - The portion of the incoming request’s URL path that corresponds to the application. Converts to Rack’s SCRIPT_NAME.
:input - The input stream. Converts to Rack’s rack.input.
:http_host - The HTTP host for the incoming request. Converts to Rack’s HTTP_HOST.
:https - Boolean indicating whether the incoming request uses HTTPS. Converts to Rack’s HTTPS.
:method - The HTTP method for the incoming request, case-insensitive. Converts to Rack’s REQUEST_METHOD.
:script_name - The portion of the incoming request’s URL path that corresponds to the application. Converts to Rack’s SCRIPT_NAME.
:input - The input stream. Converts to Rack’s rack.input.
defaults - Default values for the Rack env. Entries are specified in the same format as env. env will be merged on top of these values. defaults will be retained when calling new on a renderer instance.
If no http_host is specified, the env HTTP host will be derived from the routes’ default_url_options. In this case, the https boolean and the script_name will also be derived from default_url_options if they were not specified. Additionally, the https boolean will fall back to Rails.application.config.force_ssl if default_url_options does not specify a protocol.
# File actionpack/lib/action_controller/renderer.rb, line 122 def defaults @defaults = @defaults.dup if @defaults.frozen? @defaults end
# File actionpack/lib/action_controller/renderer.rb, line 72 def new(env = nil) self.class.new controller, env, @defaults end
Creates a new renderer using the same controller, but with a new Rack env.
ApplicationController.renderer.new(method: "post")
# File actionpack/lib/action_controller/renderer.rb, line 129 def render(*args) request = ActionDispatch::Request.new(env_for_request) request.routes = controller._routes instance = controller.new instance.set_request! request instance.set_response! controller.make_response!(request) instance.render_to_string(*args) end
Renders a template to a string, just like ActionController::Rendering#render_to_string.
# File actionpack/lib/action_controller/renderer.rb, line 78 def with_defaults(defaults) self.class.new controller, @env, @defaults.merge(defaults) end
Creates a new renderer using the same controller, but with the given defaults merged on top of the previous defaults.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.