method

respond_with

respond_with(*resources, &block)
public

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.

3Notes

needs to be paired with respond_to

ssoroka · Oct 16, 201012 thanks

Needs to be paired with respond_to at the top of your class.

class MyController < ApplicationController
respond_to :js, :html

Undocumented :location option

szeryf · Oct 8, 20116 thanks

You can use undocumented +:location+ option to override where +respond_to+ sends if resource is valid, e.g. to redirect to products index page instead of a specific product's page, use:

respond_with(@product, :location => products_url)  

RailsCast about Responders

dougireton · Jun 24, 20111 thank

See Ryan Bate's excellent RailsCast #224 about Responders in Rails 3.x: http://asciicasts.com/episodes/224-controllers-in-rails-3