#ruby-on-rails #ruby-on-rails-3 #devise
#ruby-on-rails #ruby-on-rails-3 #разработать
Вопрос:
У меня есть приложение rails, которое использует devise. Мне любопытно узнать, возможно ли в таблице User каким-либо образом отслеживать, откуда пришел новый пользователь, HTTP referrer?
Я хотел бы знать, что пришло из Facebook, Twitter, LinkedIn, Google , чтобы отследить вирусный цикл.
Есть идеи? Видел, как кто-нибудь это делал? Возможно? Где это должно находиться в приложении rails? Все еще очень новый. Спасибо
Комментарии:
1. Когда? Когда он попал на веб-сайт, а затем зарегистрировался или за любое посещение?
2. В любое время создается новый User.record
3. Request.env[«HTTP_REFERER»] недоступен локально?
Ответ №1:
Это можно было бы сделать следующим образом. Может потребоваться некоторая настройка и исправление, но вы получите представление о том, что перед фильтром для контроллера приложения вы будете вызывать его для любого действия
def landing_filter
if from_other_site(request.referrer) and !session[:referer].blank?
session[:referer] = request.referrer #you don't want to delete first entrance
end
end
from_other_site должен быть методом, который проверит доменное имя в URL-адресе реферера, если оно соответствует вашему, а затем вернет false
, в противном случае true
в devise/registration/new.erb.html просмотр добавления в скрытое поле формы
<%= f.hidden_field :referrer, session[:referrer] %>
и не забудьте добавить миграцию с новым полем базы данных для пользователя
Комментарии:
1. Спасибо, но есть идеи, почему ссылка не отображается на localhost? Что-то отключает ссылку локально?
2. Ваш браузер всегда должен отправлять ссылку, за исключением случаев, когда вы вводите URL вручную в браузере или изначально открываете страницу, например, из меню закладок браузера. Чтобы проверить, как работает этот пример, попробуйте создать публикацию в Facebook с URL
http://localhost:3000/your_controller/action
и проверьте URL ссылки в журнале или отладчике, он должен совпадать с URL facebook страницы, где вы нажали на ссылку3. Знаете ли вы, как реализовать метод с другого сайта?
4. Я не уверен, что вы имеете в виду
Ответ №2:
Сохраните referer где-нибудь и после создания пользователя скопируйте информацию в таблицу user. Использование сеанса для сохранения реферера работает, но постоянные файлы cookie лучше. Файлы cookie могут сохранять информацию, даже когда пользователь закрывает браузер, и появляются снова на следующий день.
# so basically in ApplicationContreller using before_filter
def referer_before_filter
if cookies[:referer].blank?
cookies.permanent[:referer] = request.env["HTTP_REFERER"] || 'none'
end
end
# and in signup action somewhere else saving that information
@user.referer = cookies[:referer] # or maybe to some other table
Вместо изменения каждого действия вы также можете использовать rails sweepers / observers для обработки автоматического сохранения при каждом создании объекта.
Хорошим средством автоматического сохранения referer и другой необходимой информации является https://github.com/holli/referer_tracking . Вы можете выбрать, хотите ли вы сохранить информацию вручную или использовать sweepers для автоматического сохранения.