respond_with
- 1.0.0
- 1.1.6
- 1.2.6
- 2.0.3
- 2.1.0
- 2.2.1
- 2.3.8
- 3.0.0 (0)
- 3.0.9 (0)
- 3.1.0 (1)
- 3.2.1 (0)
- 3.2.8 (0)
- 3.2.13 (0)
- 4.0.2 (30)
- 4.1.8 (0)
- 4.2.1 (-38)
- 4.2.7
- 4.2.9
- 5.0.0.1
- 5.1.7
- 5.2.3
- 6.0.0
- 6.1.3.1
- 6.1.7.7
- 7.0.0
- 7.1.3.2
- 7.1.3.4
- What's this?
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 create @user = User.new(params[:user]) 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.
In order to use respond_with, first you need to declare the formats your controller responds to in the class level with a call to respond_to.
needs to be paired with respond_to
Needs to be paired with respond_to at the top of your class.
class MyController < ApplicationController respond_to :js, :html
Undocumented :location option
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
See Ryan Bate’s excellent RailsCast #224 about Responders in Rails 3.x: http://asciicasts.com/episodes/224-controllers-in-rails-3
Alternitive to to add flash to respond with
This is a nice way to add flash if you don’t have a any logic that needs to go around your flash.
def destroy @current_user_session.destroy respond_with @current_user_session do |format| format.html {redirect_to login_path, notice: "You have been logged out"} end end