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://) - 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
56:     def redirect_to(options = {}, response_status = {}) #:doc:
57:       raise ActionControllerError.new("Cannot redirect to nil!") if options.nil?
58:       raise AbstractController::DoubleRenderError if response_body
59: 
60:       self.status        = _extract_redirect_to_status(options, response_status)
61:       self.location      = _compute_redirect_to_location(options)
62:       self.response_body = "<html><body>You are being <a href=\"#{ERB::Util.h(location)}\">redirected</a>.</body></html>"
63:     end

Private Instance Methods

_compute_redirect_to_location(options) click to toggle source
    # File lib/action_controller/metal/redirecting.rb, line 76
76:       def _compute_redirect_to_location(options)
77:         case options
78:         # The scheme name consist of a letter followed by any combination of
79:         # letters, digits, and the plus ("+"), period ("."), or hyphen ("-")
80:         # characters; and is terminated by a colon (":").
81:         when %{^\w[\w+.-]*:.*}
82:           options
83:         when String
84:           request.protocol + request.host_with_port + options
85:         when :back
86:           raise RedirectBackError unless refer = request.headers["Referer"]
87:           refer
88:         else
89:           url_for(options)
90:         end.gsub(/[\r\n]/, '')
91:       end
_extract_redirect_to_status(options, response_status) click to toggle source
    # File lib/action_controller/metal/redirecting.rb, line 66
66:       def _extract_redirect_to_status(options, response_status)
67:         status = if options.is_a?(Hash) && options.key?(:status)
68:           Rack::Utils.status_code(options.delete(:status))
69:         elsif response_status.key?(:status)
70:           Rack::Utils.status_code(response_status[:status])
71:         else
72:           302
73:         end
74:       end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.