Ruby on rails 邀请与Desive的链接

Ruby on rails 邀请与Desive的链接,ruby-on-rails,ruby,devise,devise-invitable,Ruby On Rails,Ruby,Devise,Devise Invitable,我想建立一个邀请系统,其中每个注册用户都有一个唯一的邀请链接。当他们的朋友使用这个链接注册时,他们都会得到好处。你也应该能够通过社交媒体或电子邮件发送链接 我指的是airbnb的邀请系统: 我尝试过使用Desive invitable,但效果似乎不同。它似乎是先用电子邮件注册用户,然后在用户接受邀请时注册。这不允许社交媒体共享 那么,我该如何构建这样一个邀请系统,以及如何将其与Desive集成。您可以为这些链接创建特定的路径,例如/r/1234(其中1234)是分配给推荐人的推荐人代码 一旦裁

我想建立一个邀请系统,其中每个注册用户都有一个唯一的邀请链接。当他们的朋友使用这个链接注册时,他们都会得到好处。你也应该能够通过社交媒体或电子邮件发送链接

我指的是airbnb的邀请系统:

我尝试过使用Desive invitable,但效果似乎不同。它似乎是先用电子邮件注册用户,然后在用户接受邀请时注册。这不允许社交媒体共享


那么,我该如何构建这样一个邀请系统,以及如何将其与Desive集成。

您可以为这些链接创建特定的路径,例如
/r/1234
(其中
1234
)是分配给推荐人的推荐人代码

一旦裁判通过分配给该路线控制员的链接,您就可以设置cookie
referer=1234
,并重定向到注册页面

让我们添加到
用户
模型:referer\u code\u on\u 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 
# 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

我们假设您的
用户
模型在数据库中存储了
referer\u code
,并在注册时随机分配唯一值

谢谢您的回答。但是我不知道如何像你说的那样创建一条特定的路线。我需要建立一个推荐模型吗?你可以为用户模型再添加一个属性,比如推荐代码和在创建之前设置值。所以所有用户都有自己的参考代码。@Railsdeveloperbeginner2002我用特定的路线设置更新了我的答案。也许你应该看看这个@ak1712。我尝试使用designe不可避免,但它的工作原理与我的预期不同。它似乎先用电子邮件注册用户,这不允许社交媒体共享。
# 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