Friendly forwarding in Rails
When forwarding to the URL immediately before current one
Use the request.referrer
method.
...
def destroy
@micropost.destroy
flash[:success] = "Micropost deleted"
redirect_to request.referrer || root_url
end
...
When forwarding to the URL further before
Store the URL in the session
ahead of time.
module SessionsHelper
...
# Redirects to stored location (or to the default).
def redirect_back_or(default)
redirect_to(session[:forwarding_url] || default)
session.delete(:forwarding_url)
end
# Stores the URL trying to be accessed.
def store_location
session[:forwarding_url] = request.original_url if request.get?
end
end
request.referrer
- Returns the previous request URL as a String.
- The same as
request.headers["HTTP_REFERER"]
original_url
- Returns the original request URL as a String.
# get "/articles?page=2"
request.original_url # => "http://www.example.com/articles?page=2"