Реферальная программа - куки и многое другое (Rails) - PullRequest
5 голосов
/ 16 марта 2011

Я создаю реферальную программу для своего приложения Ruby on Rails, чтобы пользователь мог поделиться ссылкой, содержащей его идентификатор пользователя (app.com/?r=ID).Если идентификатор реферера присутствует, когда посетитель попадает на домашнюю страницу приложения, форма регистрации на главной странице содержит скрытое поле, которое заполняется идентификатором реферера.Затем контроллер обнаруживает идентификатор и создает нового реферала в таблице рефералов, если приглашенный посетитель регистрируется.Это работает, и вот этот кусок кода:

@referrer = User.find(params[:r]) rescue nil
unless @referrer.nil?
  @referral = Referral.new(:referrer_id=>@referrer.id)
end

Довольно простой материал, но его довольно легко сломать (например: если посетитель уходит с домашней страницы, идентификатор реферера теряется).Мне кажется, что файлы cookie могут быть более надежным методом, когда файл cookie, содержащий идентификатор реферала, хранится на компьютере указанного пользователя в течение x дней.Это довольно распространенное явление, особенно с партнерскими программами, такими как Groupon, но я никогда не работал с cookie-файлами и не знаю, с чего начать.

Кроме того, есть ли хороший способ замаскировать или изменить URL реферальной системы?Вместо app.com /? R = 1842 , я бы предпочел что-то вроде app.com / x39f3 <- случайно сгенерированная последовательность чисел, связанная с данным пользователем, без<em>? R = часть.

Любая помощь с благодарностью.Спасибо!

1 Ответ

11 голосов
/ 17 марта 2011

Чтобы ответить на вопрос о файлах cookie, достаточно просто задать их:

cookies['app-referrer-id'] = params[:r]

И тогда это тот же формат, чтобы читать их обратно (но без назначения). Я хотел бы предложить поместить этот код в before_filter в вашем контроллере приложения. Таким образом, файл cookie будет установлен независимо от страницы, на которой ваш посетитель впервые зашел на ваш сайт.

Что касается изменения структуры URL-адресов на предлагаемый формат, вам необходимо, чтобы коды рефералов соответствовали определенному шаблону, иначе вы, скорее всего, столкнетесь с проблемами маршрутизации. Если, например, они соответствуют формату 3 букв, за которыми следуют три цифры, вы можете поместить следующий файл маршрутов:

match '/:referrer_id' => 'app#index', :constraints => {:referrer_id => /[a-zA-Z]{3}[0-9]{3}/}

Ссылка на app # index должна быть изменена на контроллер, в котором вы обрабатываете рефералы, и вы можете обращаться к referrer_id через params [: referrer_id].

Надеюсь, это пригодится.

Robin

...