module ActionController::Renderers
def self.add(key, &block)
ActionController::MimeResponds::ClassMethods.respond_to and
To use renderers and their mime types in more concise ways, see
end
}
format.csv { render csv: @csvable, filename: @csvable.name }
format.html
respond_to do |format|
@csvable = Csvable.find(params[:id])
def show
To use the csv renderer in a controller action:
Mime::Type.register.
For a custom renderer, you'll need to register a mime type with
Note that we used Mime::CSV for the csv mime type as it comes with Rails.
end
disposition: "attachment; filename=#{filename}.csv"
send_data str, type: Mime::CSV,
str = obj.respond_to?(:to_csv) ? obj.to_csv : obj.to_s
filename = options[:filename] || 'data'
ActionController::Renderers.add :csv do |obj, options|
Create a csv renderer:
hash of options passed to +render+.
is the value paired with its key and the second is the remaining
pass it a name and a block. The block takes two arguments, the first
AbstractController::Rendering#render. To create a renderer
A renderer is invoked by passing its name as an option to
Adds a new renderer to call within controller actions.
def self.add(key, &block) define_method("_render_option_#{key}", &block) RENDERERS << key.to_sym end
def _handle_render_options(options)
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
def render_to_body(options)
def render_to_body(options) _handle_render_options(options) || super end