Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Correctly doing redirect_to :back in Ruby on Rails when referrer is not available

I'm having a problem with redirect_to :back. Yes, it's referrers.

I often get the exception

(ActionController::RedirectBackError) "No HTTP_REFERER was set in the request to this action, so redirect_to :back could not be called successfully. If this is a test, make sure to specify request.env[\"HTTP_REFERER\"]."

I realize that this is a result of a referrer not being available. Is there a way that, for example, one can set a session variable on each access with the last page visited, and, when HTTP_REFERER is not available, utilize this session variable to redirect to?

like image 644
user67050 Avatar asked Apr 21 '09 08:04

user67050


1 Answers

It is unlikely that you do have a session and don't have a referrer.

The situation that a referrer is not set isn't that uncommon and I usually rescue that expection:

def some_method   redirect_to :back rescue ActionController::RedirectBackError   redirect_to root_path end 

If you do this often (which I think is a bad idea) you can wrap it in an other method like Maran suggests.

BTW I think that's a bad idea because this makes the userflow ambiguous. Only in the case of a login this is sensible.

UPDATE: As several people pointed out this no longer works with Rails 5. Instead, use redirect_back, this method also supports a fallback. The code then becomes:

def some_method   redirect_back fallback_location: root_path end 
like image 174
harm Avatar answered Oct 13 '22 16:10

harm