Как сохранить, куда был направлен новый пользователь? Используя Rails Devise

#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 для автоматического сохранения.