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