Help redirect_to funciton

I used scaffold to generate a product
The scaffold created some code in the product controller
def create
@product = Product.new(params[:product])

respond_to do |format|
  if @product.save
    flash[:notice] = 'Product was successfully formcreated.'
    format.html { redirect_to(@product) }
    format.xml  { render :xml => @product, :status

=> :created, :location => @product }
else
format.html { render :action => “new” }
format.xml { render :xml => @product.errors, :status
=> :unprocessable_entity }
end
end
end

format.html {redirect_to(@product)}
I could not understand the this line and since its does not contain
any action.
pls help in understanding the code.

On 13 Apr 2008, at 03:28, Duke wrote:

   format.xml  { render :xml => @product, :status

=> :created, :location => @product }
else
format.html { render :action => “new” }
format.xml { render :xml => @product.errors, :status
=> :unprocessable_entity }
end
end
end

format.html {redirect_to(@product)}
That says ‘if the client requested html, the redirect them to the url
that shows @product’. Because you’ve got your nice restful routing
redirect_to knows that it should send you to /products/show/123
(assuming that the id of @product is 123)

Fred

Duke,

The respond_to is a new feature of Rails 2 (It might have been in
rails 1.2 at some point) and is intended to let you define different
responses depending upon the “type” of the request. The most standard
examples are:

  • normal HTML request, you respond with a normal Rails response,
    usually a default render, another render or a redirect
  • XML request, you respond with rendering XML, usually with the object
    or objects
  • RJS request, you respond with an update block or with an RJS file,
    usually because of AJAX calls

So, when you have:

format.html { redirect_to(@product) }

It’s saying: if the “type” of the request is a normal HTML request,
then redirect to the URL for handling a specific product. This is the
“show” action, by default, in REST-style routes. So, it’s the
functional equivalent of:

redirect_to :action => “show”, :controller => “products”, :id =>
@product.id

Also, the respond_to is nice if you need it, but also unnecessary. If
your app doesn’t need to support it, just take it off, which means
that method could simply be:

def create
@product = Product.new(params[:product])
if @product.save
flash[:notice] = ‘Product was successfully created.’
redirect_to(@product)
else
render :action => “new”
end
end

HTH!

-Danimal

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs