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.
Join the DZone community and get the full member experience.
Join For FreeRails'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:
_url
will 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
Opinions expressed by DZone contributors are their own.
Comments