Module: ActionController::Redirecting
- Extended by:
- ActiveSupport::Concern
- Includes:
- AbstractController::Logger, RackDelegation, UrlFor
- Defined in:
- actionpack/lib/action_controller/metal/redirecting.rb
Instance Method Summary collapse
-
#redirect_to(options = {}, response_status = {}) ⇒ Object
Redirects the browser to the target specified in
options
.
Methods included from ActiveSupport::Concern
append_features, extended, included
Methods included from UrlFor
Methods included from AbstractController::UrlFor
Methods included from ActionDispatch::Routing::UrlFor
#initialize, #url_for, #url_options
Methods included from ActionDispatch::Routing::PolymorphicRoutes
#polymorphic_path, #polymorphic_url
Methods included from RackDelegation
#dispatch, #reset_session, #response_body=
Instance Method Details
#redirect_to(options = {}, response_status = {}) ⇒ Object
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://
) - 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.
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, RedirectBackError will be raised. You may specify some fallback behavior for this case by rescuing RedirectBackError.
59 60 61 62 63 64 65 66 |
# File 'actionpack/lib/action_controller/metal/redirecting.rb', line 59 def redirect_to( = {}, response_status = {}) #:doc: raise ActionControllerError.new("Cannot redirect to nil!") if .nil? raise AbstractController::DoubleRenderError if response_body self.status = _extract_redirect_to_status(, response_status) self.location = _compute_redirect_to_location() self.response_body = "<html><body>You are being <a href=\"#{ERB::Util.h(location)}\">redirected</a>.</body></html>" end |