- MODULE ActionController::Renderers::All
- MODULE ActionController::Renderers::ClassMethods
- MODULE ActionController::Renderers::Mime
RENDERERS | = | Set.new |
A Set containing renderer names that correspond to available renderer
procs. Default values are |
Adds a new renderer to call within controller actions. A renderer is
invoked by passing its name as an option to
AbstractController::Rendering#render
. To create a renderer
pass it a name and a block. The block takes two arguments, the first is the
value paired with its key and the second is the remaining hash of options
passed to render
.
Create a csv renderer:
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
Note that we used Mime::CSV for the csv mime type as it comes with Rails.
For a custom renderer, you'll need to register a mime type with
Mime::Type.register
.
To use the csv renderer in a controller action:
def show
@csvable = Csvable.find(params[:id])
respond_to do |format|
format.html
format.csv { render csv: @csvable, filename: @csvable.name }
end
end
To use renderers and their mime types in more concise ways, see
ActionController::MimeResponds::ClassMethods.respond_to
This method is the opposite of add method.
Usage:
ActionController::Renderers.remove(:csv)
# File actionpack/lib/action_controller/metal/renderers.rb, line 40 def _render_to_body_with_renderer(options) _renderers.each do |name| if options.key?(name) _process_options(options) method_name = Renderers._render_with_renderer_method_name(name) return send(method_name, options.delete(name), options) end end nil end