Вы можете создать указанный c маршрут для этих ссылок, например, /r/1234
(где 1234
) - это код реферера, назначенный для реферера.
После того, как рефери go через эту ссылку назначен для этот контроллер маршрута вы устанавливаете поваром ie referrer=1234
и перенаправляете на страницу регистрации.
Давайте добавим к User
модель: атрибут: referrer_code_on_signup:
class User < ApplicationRecord
attr_accessor :referrer_code_on_signup
after_commit :grand_rewards, on: create
# ... other user stuff
private
def grand_rewards
return unless referrer_code_on_signup.present?
# some rewards logic
end
end
В случае, если судья пройдет регистрационную форму и отправит ее, вы должны настроить контроллер регистрации:
# app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
def new
if cookies[:referrer].present?
build_resource(referrer_code_on_signup: cookies[:referrer])
else
build_resource
end
end
end
А затем скажите devise для использования этого контроллера вместо стандартного с помощью:
# app/config/routes.rb
devise_for :users, :controllers => {:registrations => "registrations"}
Для специального маршрута: Вы можете создать ReferrerController:
# app/controllers/referrers_controller.rb
class ReferrersController < ApplicationController
before_action :set_referrer
# Endpoint for share referrer link like example.com/r/123456 - redirects to
# sign in page and setup referrer cookies
def show
cookies[:referrer] = @referrer.referrer_code if @referrer.present?
redirect_to user_sign_up_path
end
private
def set_referrer
@referrer = User.find_by(referrer_code: params[:id])
end
end
И обновить свои маршруты с помощью строки :
resources :referrers, only: :show, path: :r
Мы предполагаем, что ваша User
модель имеет referrer_code
, сохраненную в БД, и присваивает случайное уникальное значение при регистрации