Action Controller Renderer
ActionController::Renderer
允许您在控制器操作之外渲染任意模板。
您可以通过在控制器类上调用 renderer
来获取渲染器实例。
ApplicationController.renderer
PostsController.renderer
并通过调用 render
方法渲染模板。
ApplicationController.renderer.render template: "posts/show", assigns: { post: Post.first }
PostsController.renderer.render :show, assigns: { post: Post.first }
作为快捷方式,您也可以直接在控制器类本身调用 render
。
ApplicationController.render template: "posts/show", assigns: { post: Post.first }
PostsController.render :show, assigns: { post: Post.first }
常量
DEFAULTS | = | { method: "get", input: "" }.freeze |
RACK_KEY_TRANSLATION | = | { http_host: "HTTP_HOST", https: "HTTPS", method: "REQUEST_METHOD", script_name: "SCRIPT_NAME", input: "rack.input" } |
属性
[R] | controller |
类公共方法
for(controller, env = nil, defaults = DEFAULTS) 链接
使用给定的控制器类创建新的渲染器。参见 ::new
。
来源: 显示 | 在 GitHub 上
# File actionpack/lib/action_controller/renderer.rb, line 64 def self.for(controller, env = nil, defaults = DEFAULTS) new(controller, env, defaults) end
new(controller, env, defaults) 链接
初始化新的 Renderer
。
参数
-
controller
- 要实例化以进行渲染的控制器类。 -
env
- 在渲染时用于模拟请求的 Rack 环境。条目可以是典型的 Rack 环境键和值,也可以是以下任何一项,这些条目将被适当地转换。-
:http_host
- 进入请求的 HTTP 主机。转换为 Rack 的HTTP_HOST
。 -
:https
- 布尔值,指示进入请求是否使用 HTTPS。转换为 Rack 的HTTPS
。 -
:method
- 进入请求的 HTTP 方法,不区分大小写。转换为 Rack 的REQUEST_METHOD
。 -
:script_name
- 进入请求的 URL 路径中与应用程序相对应的部分。转换为 Rack 的SCRIPT_NAME
。 -
:input
- 输入流。转换为 Rack 的rack.input
。 -
:http_host
- 进入请求的 HTTP 主机。转换为 Rack 的HTTP_HOST
。 -
:https
- 布尔值,指示进入请求是否使用 HTTPS。转换为 Rack 的HTTPS
。 -
:method
- 进入请求的 HTTP 方法,不区分大小写。转换为 Rack 的REQUEST_METHOD
。 -
:script_name
- 进入请求的 URL 路径中与应用程序相对应的部分。转换为 Rack 的SCRIPT_NAME
。 -
:input
- 输入流。转换为 Rack 的rack.input
。
-
-
defaults
- Rack 环境的默认值。条目以与env
相同的格式指定。env
将合并到这些值之上。defaults
在对渲染器实例调用new
时将被保留。
如果未指定 http_host
,则环境 HTTP 主机将从路由的 default_url_options
中推断出来。在这种情况下,https
布尔值和 script_name
也将从 default_url_options
中推断出来,如果它们未被指定。此外,如果 default_url_options
未指定 protocol
,则 https
布尔值将回退到 Rails.application.config.force_ssl
。
来源: 显示 | 在 GitHub 上
# 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
实例公共方法
defaults() 链接
来源: 显示 | 在 GitHub 上
# File actionpack/lib/action_controller/renderer.rb, line 122 def defaults @defaults = @defaults.dup if @defaults.frozen? @defaults end
new(env = nil) 链接
使用相同的控制器,但使用新的 Rack 环境创建新的渲染器。
ApplicationController.renderer.new(method: "post")
来源: 显示 | 在 GitHub 上
# File actionpack/lib/action_controller/renderer.rb, line 72 def new(env = nil) self.class.new controller, env, @defaults end
render(*args) 链接
将模板渲染为字符串,就像 ActionController::Rendering#render_to_string
一样。
来源: 显示 | 在 GitHub 上
# 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
with_defaults(defaults) 链接
使用相同的控制器,但将给定的默认值合并到先前的默认值之上创建新的渲染器。
来源: 显示 | 在 GitHub 上
# File actionpack/lib/action_controller/renderer.rb, line 78 def with_defaults(defaults) self.class.new controller, @env, @defaults.merge(defaults) end