класс 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 50
def self.for(controller, env = {}, defaults = DEFAULTS.dup)
new(controller, env, defaults)
end Создает новый экземпляр рендерера для конкретного класса контроллера.
# File actionpack/lib/action_controller/renderer.rb, line 67 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 55
def new(env = {})
self.class.new controller, env, defaults
end Создает новый рендер для того же контроллера, но с новой средой.
# File actionpack/lib/action_controller/renderer.rb, line 74 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 60 def with_defaults(defaults) self.class.new controller, @env, self.defaults.merge(defaults) end
Создает новый рендер для того же контроллера, но с новыми значениями по умолчанию.
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.