轨道中的简单转介系统

时间:2016-12-24 08:04:41

标签: ruby-on-rails ruby

我正在制作一个非常简单的推荐系统,但我看到的问题是我需要通过一次提交动作对数据库进行两次不同的调用,而我不知道该怎么做。

该系统的总体思路如下:

  • 访问者订阅邮件列表并收到一封电子邮件,其中包含引荐链接以及识别它们的某种查询字符串参数(例如www.domain.com?referrer_id=1)
  • 当其他访问者使用此推介链接并注册时,我会存储a)新订阅者的电子邮件地址,以及b)推介信息

这将存储在两个表中:

  • subscribers| id | email | referrer |
  • referrals| id | subscriber_id | referrals |,其中推荐是订阅者推荐其他订阅者的次数

同样,我想知道如何使用单个提交操作进行两次调用 - 一次针对新订阅者,另一次针对推荐信息。或者,如果这不是最好的方法,那么如何使用最佳实践来做到这一点。

1 个答案:

答案 0 :(得分:4)

对于您的方案,您只需要为您的用户(订阅者)使用一个表:

|id  |email        |... |referred_by  |
|5   |user5@x.com  |... |1            |
|6   |user6@x.com  |... |5            |
|7   |user7@x.com  |... |5            |
|8   |user8@x.com  |... |6            |

您要发送给user5,与朋友分享的链接将是:

www.domain.com/users/sign-up?referred_by=5

然后,当任何人打开此链接时,使用单个数据库查询的单一操作将创建一个referred_by值等于5(引荐者的ID)的新用户:

User.create!(email: 'xyz@x.com',... ,referred_by: 5) 

您可以将用户(订阅者)模型修改为如下所示:

class User < ActiveRecord::Base
....

  belongs_to :referrer, :class_name => 'User', foreign_key: 'referred_by'

  def number_of_referred_users
    where(referred_by: id).count
  end
....
end

然后,您可以随时获得某个用户引用您网站的用户数量:

user.number_of_referred_users

而且,如果您想获得某个用户的推荐人,您可以说:

user.referrer