класс ActionController::Renderer
ActionController::Renderer позволяет отображать произвольные шаблоны без необходимости их использования в действиях контроллера.
Вы получаете конкретный класс рендера, вызвав ActionController::Base#renderer. Например:
ApplicationController.renderer
Это позволяет вам напрямую вызывать метод render.
ApplicationController.renderer.render template: '...'
Вы можете использовать этот сокращённый способ в контроллере вместо предыдущего примера:
ApplicationController.render template: '...'
render позволяет использовать те же параметры, что и при отображении в контроллере. Например:
FooController.render :action, locals: { ... }, assigns: { ... } Шаблон будет отображен в среде Rack, к которой можно получить доступ через ActionController::Renderer#env. Вы можете настроить её двумя способами:
-
изменяя значения по умолчанию рендера, как
ApplicationController.renderer.defaults # => hash with default Rack environment
-
инициализируя экземпляр рендера, передав ему пользовательскую среду.
ApplicationController.renderer.new(method: 'post', https: true)
Константы
- DEFAULTS
- IDENTITY
- RACK_KEY_TRANSLATION
- RACK_VALUE_TRANSLATION
Атрибуты
Публичные методы класса
# File actionpack/lib/action_controller/renderer.rb, line 48
def self.for(controller, env = {}, defaults = DEFAULTS.dup)
new(controller, env, defaults)
end Создаёт новый экземпляр рендера для определённого класса контроллера.
# File actionpack/lib/action_controller/renderer.rb, line 65 def initialize(controller, env, defaults) @controller = controller @defaults = defaults @env = normalize_keys defaults.merge(env) end
Принимает пользовательскую среду Rack для отображения шаблонов. Она будет объединена со стандартной средой Rack, определённой ActionController::Renderer::DEFAULTS.
Публичные методы экземпляра
# File actionpack/lib/action_controller/renderer.rb, line 53
def new(env = {})
self.class.new controller, env, defaults
end Создаёт новый рендер для того же контроллера, но с новой средой.
# File actionpack/lib/action_controller/renderer.rb, line 72 def render(*args) raise "missing controller" unless controller request = ActionDispatch::Request.new @env request.routes = controller._routes instance = controller.new instance.set_request! request instance.set_response! controller.make_response!(request) instance.render_to_string(*args) end
Отображает шаблоны с любыми параметрами из ActionController::Base#render_to_string.
# File actionpack/lib/action_controller/renderer.rb, line 58 def with_defaults(defaults) self.class.new controller, @env, self.defaults.merge(defaults) end
Создаёт новый рендер для того же контроллера, но с новыми значениями по умолчанию.
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.