Redirects the browser to the target specified in options
. This
parameter can take one of three forms:
Hash
- The URL will be generated by calling url_for with the
options
.
Record
- The URL will be generated by calling url_for with the
options
, which will reference a named URL for that record.
String
starting with protocol://
(like
http://
) - Is passed straight through as the target for
redirection.
String
not containing a protocol - The current protocol and
host is prepended to the string.
:back
- Back to the page that issued the request. Useful for
forms that are triggered from multiple places. Short-hand for
redirect_to(request.env["HTTP_REFERER"])
Examples:
redirect_to :action => "show", :id => 5 redirect_to post redirect_to "http://www.rubyonrails.org" redirect_to "/images/screenshot.jpg" redirect_to articles_url redirect_to :back
The redirection happens as a "302 Moved" header unless otherwise specified.
Examples:
redirect_to post_url(@post), :status => :found redirect_to :action=>'atom', :status => :moved_permanently redirect_to post_url(@post), :status => 301 redirect_to :action=>'atom', :status => 302
The status code can either be a standard HTTP Status code as an integer, or a symbol representing the downcased, underscored and symbolized description.
It is also possible to assign a flash message as part of the redirection.
There are two special accessors for commonly used the flash names
alert
and notice
as well as a general purpose
flash
bucket.
Examples:
redirect_to post_url(@post), :alert => "Watch it, mister!" redirect_to post_url(@post), :status=> :found, :notice => "Pay attention to the road" redirect_to post_url(@post), :status => 301, :flash => { :updated_post_id => @post.id } redirect_to { :action=>'atom' }, :alert => "Something serious happened"
When using redirect_to :back
, if there is no referrer,
RedirectBackError will be raised. You may specify some fallback behavior
for this case by rescuing RedirectBackError.
# File lib/action_controller/metal/redirecting.rb, line 56 def redirect_to(options = {}, response_status = {}) #:doc: raise ActionControllerError.new("Cannot redirect to nil!") if options.nil? raise AbstractController::DoubleRenderError if response_body self.status = _extract_redirect_to_status(options, response_status) self.location = _compute_redirect_to_location(options) self.response_body = "<html><body>You are being <a href=\"#{ERB::Util.h(location)}\">redirected</a>.</body></html>" end