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
將合併到這些值的頂端。在呈現器執行個體上呼叫new
時將保留defaults
。
如果未指定 http_host
,將從路由的 default_url_options
中推導出 env HTTP 主機。在此情況下,如果未指定,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