邀请设计链接

问题描述 投票:0回答:1

我想建立一个邀请系统,每个注册用户都有一个唯一的邀请链接。当他们的朋友使用该链接进行注册时,他们俩都会受益。您还应该能够通过社交媒体或电子邮件发送链接。

我的意思是airbnb的邀请系统的一个例子:

enter image description here

我曾尝试使用devvitable,但似乎工作方式有所不同。似乎先用电子邮件注册了用户,然后在他们接受邀请后对其进行了注册。这不允许社交媒体共享。

所以,我该如何构建这样的邀请系统,以及如何将其与设计集成。

ruby-on-rails ruby devise devise-invitable
1个回答
0
投票

您可以为此链接创建特定的路由,例如/r/1234(其中1234是分配给引荐来源网址的引荐来源代码。

一旦裁判通过分配给此路由控制器的此链接,您将设置cookie 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存储在数据库中,并在注册时分配了随机的唯一值

© www.soinside.com 2019 - 2024. All rights reserved.