Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

what does redirect_to(@model) means in rails?

From this url http://www.helloworlder.com/?p=6 i found the syntax for redirect_to or render, expects a string.

Like this:

render(:action=>’my_action’)
redirect_to(:action=>’my_action’)

But in ruby rails guides i see something like redirect_to(@model). It is stated in their docs that it will go to show action. Please explain what does redirect_to(@model) means.

Thanks

like image 680
Rajkamal Subramanian Avatar asked Aug 20 '11 10:08

Rajkamal Subramanian


People also ask

What is redirect_to in Ruby?

Rails's redirect_to takes two parameters, option and response_status (optional). It redirects the browser to the target specified in options. This parameter can be: Hash - The URL will be generated by calling url_for with the options.

What is the difference between render and redirect_to?

There is an important difference between render and redirect_to: render will tell Rails what view it should use (with the same parameters you may have already sent) but redirect_to sends a new request to the browser.

What does redirect_to return?

redirect_to will cause any automatic rendering to be skipped. You only need the 'return' if you need to bypass further code in the action. If the further code does an explicit render , then you must do a return to avoid an error of redirect and render both being present.


2 Answers

For example, you have a Post model.

redirect_to @model will take you to this page:

http://yourapp/posts/:id/show

like image 112
rookieRailer Avatar answered Sep 28 '22 09:09

rookieRailer


You can look at the source here: https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/routing/polymorphic_routes.rb

When redirect_to takes a Model, it filters through a few methods to get the path calling the polymorphic_url method. The API for this method [1] actually has a lot of details, copied from the comments here:

  # Constructs a call to a named RESTful route for the given record and returns the
  # resulting URL string. For example:
  #
  #   # calls post_url(post)
  #   polymorphic_url(post) # => "http://example.com/posts/1"
  #   polymorphic_url([blog, post]) # => "http://example.com/blogs/1/posts/1"
  #   polymorphic_url([:admin, blog, post]) # => "http://example.com/admin/blogs/1/posts/1"
  #   polymorphic_url([user, :blog, post]) # => "http://example.com/users/1/blog/posts/1"
  #   polymorphic_url(Comment) # => "http://example.com/comments"
  #
  # ==== Options
  #
  # * <tt>:action</tt> - Specifies the action prefix for the named route:
  #   <tt>:new</tt> or <tt>:edit</tt>. Default is no prefix.
  # * <tt>:routing_type</tt> - Allowed values are <tt>:path</tt> or <tt>:url</tt>.
  #   Default is <tt>:url</tt>.
  #
  # ==== Examples
  #
  #   # an Article record
  #   polymorphic_url(record)  # same as article_url(record)
  #
  #   # a Comment record
  #   polymorphic_url(record)  # same as comment_url(record)
  #
  #   # it recognizes new records and maps to the collection
  #   record = Comment.new
  #   polymorphic_url(record)  # same as comments_url()
  #
  #   # the class of a record will also map to the collection
  #   polymorphic_url(Comment) # same as comments_url()

Essentially, the answer to your question is that it calls (equivalently) the model_path(@model) method for the model.

[1] http://apidock.com/rails/ActionController/PolymorphicRoutes/polymorphic_url

like image 40
Stefan Mai Avatar answered Sep 28 '22 10:09

Stefan Mai