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
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 54
54: def redirect_to(options = {}, response_status = {}) #:doc:
55: raise ActionControllerError.new("Cannot redirect to nil!") if options.nil?
56: raise AbstractController::DoubleRenderError if response_body
57:
58: self.status = _extract_redirect_to_status(options, response_status)
59: self.location = _compute_redirect_to_location(options)
60: self.response_body = "<html><body>You are being <a href=\"#{ERB::Util.h(location)}\">redirected</a>.</body></html>"
61: end
# File lib/action_controller/metal/redirecting.rb, line 74
74: def _compute_redirect_to_location(options)
75: case options
76: # The scheme name consist of a letter followed by any combination of
77: # letters, digits, and the plus ("+"), period ("."), or hyphen ("-")
78: # characters; and is terminated by a colon (":").
79: when %{^\w[\w+.-]*:.*}
80: options
81: when String
82: request.protocol + request.host_with_port + options
83: when :back
84: raise RedirectBackError unless refer = request.headers["Referer"]
85: refer
86: else
87: url_for(options)
88: end.gsub(/[\r\n]/, '')
89: end
# File lib/action_controller/metal/redirecting.rb, line 64
64: def _extract_redirect_to_status(options, response_status)
65: status = if options.is_a?(Hash) && options.key?(:status)
66: Rack::Utils.status_code(options.delete(:status))
67: elsif response_status.key?(:status)
68: Rack::Utils.status_code(response_status[:status])
69: else
70: 302
71: end
72: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.