Methods
#
A
R
Classes and Modules
Constants
RENDERERS = Set.new
 

Hash of available renderers, mapping a renderer name to its proc. Default keys are :json, :js, :xml.

Class Public methods
add(key, &block)

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.

Example

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

To use renderers and their mime types in more concise ways, see ActionController::MimeResponds::ClassMethods.respond_to and ActionController::MimeResponds#respond_with

    # File actionpack/lib/action_controller/metal/renderers.rb, line 78
78:     def self.add(key, &block)
79:       define_method("_render_option_#{key}", &block)
80:       RENDERERS << key.to_sym
81:     end
Instance Public methods
_handle_render_options(options)
    # File actionpack/lib/action_controller/metal/renderers.rb, line 31
31:     def _handle_render_options(options)
32:       _renderers.each do |name|
33:         if options.key?(name)
34:           _process_options(options)
35:           return send("_render_option_#{name}", options.delete(name), options)
36:         end
37:       end
38:       nil
39:     end
render_to_body(options)
    # File actionpack/lib/action_controller/metal/renderers.rb, line 27
27:     def render_to_body(options)
28:       _handle_render_options(options) || super
29:     end