класс 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
- RACK_KEY_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, 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 91 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.
Основные параметры:
-
:partial- СмотритеActionView::PartialRendererдля подробностей. -
:file- Отображает явный файл шаблона. Добавьте:localsдля передачи, если это необходимо. Не следует использовать напрямую с необработанными данными пользователя из-за отсутствия проверки. -
:inline- Отображает строку шаблонаERB. -
:plain- Отображает предоставленный текст и устанавливает тип содержимого какtext/plain. -
:html- Отображает предоставленную строку HTML, безопасную для отображения, иначе сначала выполняет экранирование HTML в строке. Устанавливает тип содержимого какtext/html. -
:json- Отображает предоставленный хэш или объект в формате JSON. Вам не нужно вызывать.to_jsonдля объекта, который вы хотите отобразить. -
:body- Отображает предоставленный текст и устанавливает тип содержимогоtext/plain.
Если параметр options не передан или указан :update, то:
Если передан объект, отвечающий на вызов render_in, то render_in вызывается на объекте, передавая текущий контекст представления.
В противном случае, частичный шаблон отображается с использованием второго параметра как хэша локальных переменных.
# File actionpack/lib/action_controller/renderer.rb, line 58 def with_defaults(defaults) self.class.new controller, @env, self.defaults.merge(defaults) end
Создаёт новый рендер для того же контроллера, но с новыми значениями по умолчанию.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.