【问题标题】:Invite Links with Devise邀请链接与设计
【发布时间】:2020-02-20 08:57:32
【问题描述】:

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

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

我曾尝试使用 devise invitable,但它的工作方式似乎有所不同。似乎首先使用电子邮件注册用户,然后如果他们接受邀请则注册他们。这不允许社交媒体共享。

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

【问题讨论】:

  • 也许你应该看看这个github.com/scambra/devise_invitable
  • @ak1712 我尝试使用不可避免的设计,但它的工作方式与我的预期不同。好像先用邮箱注册用户,不允许社交媒体分享。

标签: ruby-on-rails ruby devise devise-invitable


【解决方案1】:

您可以为此链接创建特定路由,例如/r/1234(其中1234)是分配给Referrer的referrer代码。

一旦裁判通过此链接分配给此路由控制器,您设置 cookie referrer=1234 并重定向到注册页面。

让我们添加到User model :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 

然后告诉设计使用该控制器而不是默认控制器:

# 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 存储在 DB 中,并在注册时分配随机的唯一值

【讨论】:

  • 感谢您的回答。但我不知道如何像你说的那样创建一个特定的路线。我需要建立推荐模型吗?
  • 您可以为用户模型添加一个更多属性,例如引用代码并在创建之前设置值。所以所有用户都会有自己的推荐人代码。
  • @Railsdeveloperbeginner2002 我用特定的路线设置更新了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
  • 2023-03-13
相关资源
最近更新 更多