Пригласить ссылки с Devise - PullRequest
0 голосов
/ 20 февраля 2020

Я хочу создать систему приглашений, в которой каждый зарегистрированный пользователь имеет уникальную ссылку для приглашения. И когда их друзья используют эту ссылку, чтобы зарегистрироваться, они оба получают преимущества. Вы также должны иметь возможность отправить ссылку через социальные сети или по электронной почте.

Примером того, что я имею в виду, является система приглашений airbnb:

enter image description here

Я пытался использовать devise invitable, но, похоже, он работает по-другому. Кажется, сначала нужно зарегистрировать пользователя по электронной почте, а затем подписать его, если он примет приглашение. Это не допускает совместное использование в социальных сетях.

Итак, как мне go рассказать о создании такой системы приглашений и как ее интегрировать с devise.

1 Ответ

0 голосов
/ 20 февраля 2020

Вы можете создать указанный 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, сохраненную в БД, и присваивает случайное уникальное значение при регистрации

...