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.
=> :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)
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:
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.