модуль ActionController::Renderers
Константы
- RENDERERS
-
Хэш доступных рендереров, сопоставляющий имя рендера его процедуре. Значения по умолчанию —
:json,:js,:xml.
Публичные методы класса
Добавляет новый рендер для вызова внутри действий контроллера. Рендер вызывается путём передачи его имени в качестве параметра AbstractController::Rendering#render. Для создания рендера передайте ему имя и блок. Блок принимает два аргумента: первый — значение, связанное с его ключом, второй — оставшийся хэш параметров, переданных в render.
Создаём рендер csv:
ActionController::Renderers.add :csv do |obj, options|
filename = options[:filename] || 'data'
str = obj.respond_to?(:to_csv) ? obj.to_csv : obj.to_s
send_data str, type: Mime::CSV,
disposition: "attachment; filename=#{filename}.csv"
end
Обратите внимание, что мы использовали Mime::CSV для типа mime csv, так как он поставляется с Rails. Для пользовательского рендера вам потребуется зарегистрировать тип mime с помощью Mime::Type.register.
Для использования рендера csv в действии контроллера:
def show
@csvable = Csvable.find(params[:id])
respond_to do |format|
format.html
format.csv { render csv: @csvable, filename: @csvable.name }
}
end Чтобы использовать рендеры и их типы mime более лаконично, смотрите ActionController::MimeResponds::ClassMethods.respond_to и ActionController::MimeResponds#respond_with
# File actionpack/lib/action_controller/metal/renderers.rb, line 81
def self.add(key, &block)
define_method("_render_option_#{key}", &block)
RENDERERS << key.to_sym
end Публичные методы экземпляра
# File actionpack/lib/action_controller/metal/renderers.rb, line 35
def _handle_render_options(options)
_renderers.each do |name|
if options.key?(name)
_process_options(options)
return send("_render_option_#{name}", options.delete(name), options)
end
end
nil
end # File actionpack/lib/action_controller/metal/renderers.rb, line 31 def render_to_body(options) _handle_render_options(options) || super end
© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.