Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Rails's redirect_to

DZone's Guide to

Rails's redirect_to

In this article, we take an up-close-and-personal look at the Rails framework by getting into the nitty-gritty of this particular functionality.

· Web Dev Zone ·
Free Resource

Learn how error monitoring with Sentry closes the gap between the product team and your customers. With Sentry, you can focus on what you do best: building and scaling software that makes your users’ lives better.

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.
    • redirect_to action: 'show', id: 2

  • Record - The URL will be generated by calling url_for with the options.
    • redirect_to article

  • A string starting with the protocol - // (like http: //) - is passed straight through as the target for redirection.
    • redirect_to 'http://www.rubyonrails.org'

  • A string not containing a protocol, the current protocol, and the host are prepended to the string.

redirect_to '/images/screenshot.jpg'

  • A helper method generated by Rails (most commonly used).
    • redirect_to articles_url

  • :back - Back to the page that issued the request. Useful for forms that are triggered from multiple places.
    • redirect_to :back

The redirection happens as a "302 Moved" header unless otherwise specified.

redirect_to profile_url(@profile), :status => :moved_permanently
redirect_to profile_url(@profile), :status => 302

Note: You should always use named code because it is more readable. Be sure to check other status codes.

If needed, you can also specify a controller and an action.

  • redirect_to :controller => 'article', :action => 'index'

You can specify the format, too (in case you need to redirect a request coming in one format to another format).

  • redirect_to :action => 'show', :format => 'html'

Redirect to your main page, just make sure to configure to root route first.

  • redirect_to :root

Also, redirect_to does not stop the execution of the function. To terminate the execution of the function immediately after redirect_to, use return.

  • redirect_to article_url(@article) and return

Display a Flash Message On Redirect

The most elegant way to achieve this is to use a helper method in ApplicationController and declare which types of flash messages you want to use. For example:

class ApplicationController < ActionController::Base
  ...
  add_flash_types :success, :error
  ...
end

Then, use it in your controller actions like this:

  • redirect_to articles_path, success: 'Article is successfully created'

Passing Parameters in redirect_to

If you need to pass additional parameters, just add it to helper method:

  • redirect_to article_path(@article, param: 'foo')

The above code will create this path:

  • "/articles/1?param=foo"

Or, if you want to specify the exact controller and action, do the following:

  • redirect_to controller: 'articles', action: 'show', id: 1, param: 'foo'

The above will generate the same path.

Now, you can access it in the responding action and do what you intended with it:

def show
  @param = params[:param]
  ...
end

Redirect to Subdomain

If you're looking to redirect to a subdomain try this:

  • redirect_to article_url(@article, subdomain: 'sub')

Difference Between _url and _path

The main difference between _url and _path is:

  • _urlwill give you the absolute URL path, containing the protocol, host, and port. For example, http://localhost:3000/articles.
  • _path will return the relative path, which is given without the domain, protocol, etc. So it would just be /articles.

Use redirect_back Instead of redirect_to: back

Rails 5 provides a redirect_back function to redirect the user to HTTP_REFERER. When HTTP_REFERER is not present, it redirects to the user whatever is passed in as fallback_location.

  • redirect_back(fallback_location: root_path)

You can pass in a notice, too:

  • redirect_back(fallback_location: root_path, notice: "Your message")

The Difference Between redirect_to and Render

Redirect is telling the browser it needs to make a new request to a different location. Render does not change the URL of the page you are visiting.

Conclusion

Thank you for reading this article, we hope we were able to help!

References:
https://apidock.com/rails/ActionController/Base/redirect_to
http://api.rubyonrails.org/classes/ActionController/Redirecting.html
https://tosbourn.com/difference-between-redirect-render- rails /
https://blog.bigbinary.com/2016/02/29/rails-5-improves-redirect_to_back-with-redirect-back.html
https://stackoverflow.com/questions/2350539/what-is-the -difference-between-url-and-path-while-using-the-routes-in-rails

What’s the best way to boost the efficiency of your product team and ship with confidence? Check out this ebook to learn how Sentry's real-time error monitoring helps developers stay in their workflow to fix bugs before the user even knows there’s a problem.

Topics:
ruby on rails ,web dev ,ruby ,rails web development

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}