класс 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–2020 David Heinemeier Hansson
Licensed under the MIT License.