Method: ActionController::MimeResponds#respond_with

Defined in:
lib/action_controller/metal/mime_responds.rb

#respond_with(*resources, &block) ⇒ Object

respond_with wraps a resource around a responder for default representation. First it invokes respond_to, if a response cannot be found (ie. no block for the request was given and template was not available), it instantiates an ActionController::Responder with the controller and resource.

Example

def index
  @users = User.all
  respond_with(@users)
end

It also accepts a block to be given. It’s used to overwrite a default response:

def destroy
  @user = User.find(params[:id])
  flash[:notice] = "User was successfully created." if @user.save

  respond_with(@user) do |format|
    format.html { render }
  end
end

All options given to respond_with are sent to the underlying responder, except for the option :responder itself. Since the responder interface is quite simple (it just needs to respond to call), you can even give a proc to it.



225
226
227
228
229
230
231
232
233
234
# File 'lib/action_controller/metal/mime_responds.rb', line 225

def respond_with(*resources, &block)
  raise "In order to use respond_with, first you need to declare the formats your " <<
        "controller responds to in the class level" if self.class.mimes_for_respond_to.empty?

  if response = retrieve_response_from_mimes(&block)
    options = resources.size == 1 ? {} : resources.extract_options!
    options.merge!(:default_response => response)
    (options.delete(:responder) || self.class.responder).call(self, resources, options)
  end
end