Class Index [+]

Quicksearch

ActionController::Redirecting

Public Instance Methods

redirect_to(options = {}, response_status = {}) click to toggle source

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://) 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 by redirect_to.

  • :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
  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 lib/action_controller/metal/redirecting.rb, line 69
69:     def redirect_to(options = {}, response_status = {}) #:doc:
70:       raise ActionControllerError.new("Cannot redirect to nil!") unless options
71:       raise AbstractController::DoubleRenderError if response_body
72: 
73:       self.status        = _extract_redirect_to_status(options, response_status)
74:       self.location      = _compute_redirect_to_location(options)
75:       self.response_body = "<html><body>You are being <a href=\"#{ERB::Util.h(location)}\">redirected</a>.</body></html>"
76:     end

Private Instance Methods

_compute_redirect_to_location(options) click to toggle source
     # File lib/action_controller/metal/redirecting.rb, line 89
 89:       def _compute_redirect_to_location(options)
 90:         case options
 91:         # The scheme name consist of a letter followed by any combination of
 92:         # letters, digits, and the plus ("+"), period ("."), or hyphen ("-")
 93:         # characters; and is terminated by a colon (":").
 94:         # The protocol relative scheme starts with a double slash "//"
 95:         when %{^(\w[\w+.-]*:|//).*}
 96:           options
 97:         when String
 98:           request.protocol + request.host_with_port + options
 99:         when :back
100:           raise RedirectBackError unless refer = request.headers["Referer"]
101:           refer
102:         when Proc
103:           _compute_redirect_to_location options.call
104:         else
105:           url_for(options)
106:         end.gsub(/[\00\\r\n]/, '')
107:       end
_extract_redirect_to_status(options, response_status) click to toggle source
    # File lib/action_controller/metal/redirecting.rb, line 79
79:       def _extract_redirect_to_status(options, response_status)
80:         status = if options.is_a?(Hash) && options.key?(:status)
81:           Rack::Utils.status_code(options.delete(:status))
82:         elsif response_status.key?(:status)
83:           Rack::Utils.status_code(response_status[:status])
84:         else
85:           302
86:         end
87:       end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.