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 theoptions
. -
Record
- The URL will be generated by calling url_for with theoptions
, which will reference a named URL for that record. -
String
starting withprotocol://
(likehttp://
) or a protocol relative reference (like//
) - Is passed straight through as the target for redirection. -
String
not containing a protocol - The current protocol and host is prepended to the string. -
Proc
- A block that will be executed in the controller's context. Should return any option accepted byredirect_to
. -
:back
- Back to the page that issued the request. Useful for forms that are triggered from multiple places. Short-hand forredirect_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 redirect_to proc { edit_post_url(@post) }
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. Note that the status code must be a 3xx HTTP code, or redirection will not occur.
If you are using XHR requests other than GET or POST and redirecting after
the request then some browsers will follow the redirect using the original
request method. This may lead to undesirable behavior such as a double
DELETE. To work around this you can return a 303 See Other
status code which will be followed using a GET request.
Examples:
redirect_to posts_url, :status => :see_other redirect_to :action => 'index', :status => 303
It is also possible to assign a flash message as part of the redirection.
There are two special accessors for the commonly used 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,
ActionController::RedirectBackError will be raised. You may specify some
fallback behavior for this case by rescuing
ActionController::RedirectBackError.
# File actionpack/lib/action_controller/metal/redirecting.rb, line 69 def redirect_to(options = {}, response_status = {}) #:doc: raise ActionControllerError.new("Cannot redirect to nil!") unless options 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