класс 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 87 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, по умолчанию отображается частичный шаблон, а второй параметр используется как хэш локальных переменных.
# File actionpack/lib/action_controller/renderer.rb, line 58 def with_defaults(defaults) self.class.new controller, @env, self.defaults.merge(defaults) end
Создать новый рендер для того же контроллера, но с новыми значениями по умолчанию.
© 2004–2019 David Heinemeier Hansson
Licensed under the MIT License.