I\'m trying to save the site that a user came from when they sign up. Right now I have a before_filter in my ApplicationController:
before_filter :save_refe
Jonathan:s answer works when using sessions. In case you wan't better information you should also use cookies. User can visit your site from a link (with a referer) then go away for a day and return directly to your site again (now without a referer). Would be better to save information also to a cookie in following style
def save_referer
if cookies[:referer].blank?
cookies.permanent[:referer] = request.env["HTTP_REFERER"] || 'none'
end
end
There is also a gem https://github.com/holli/referer_tracking to help handle these and other trackings automatically.
def save_referer
session['referer'] = request.env["HTTP_REFERER"] || 'none' unless session['referer'] && !is_logged_in?
end
beautiful ;-)
I think there's a flaw in your approach. As long as the user is hitting pages and is not logged in, the filter code will run. So the only way session['referer']
will not be nil is if they go straight to the signup page where they (presumably) post their login info and you check the session var.
I think you probably need to only check the referer once - to do this you'll have to modify your filter code.
def save_referer
unless is_logged_in?
unless session['referer']
session['referer'] = request.env["HTTP_REFERER"] || 'none'
end
end
end
Now when you want to know what their referer is, it will either be a valid url or 'none'. Note that since it's in the session, it's not perfect: they could go to another url and come back and the session will still be valid.