首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails中的简单推荐系统

问rails中的简单推荐系统
EN

Stack Overflow用户
提问于 2016-12-24 08:04:40
回答 1查看 3K关注 0票数 4

我正在制作一个非常简单的推荐系统,但我看到的问题是,我需要用一个提交操作对DB进行两个不同的调用,而我不知道如何做到这一点。

该系统的总体构想如下:

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

这将存储在两个表中:

  • 带有subscribers表的| id | email | referrer |
  • 带有referrals表的| id | subscriber_id | referrals |,其中引用是订阅者引用其他订阅者的次数

再次,我想知道如何打两个电话-一个为新的用户,一个为推荐信息-一个单一的提交行动。或者,如果这不是最好的方法,那么如何使用最佳实践来做到这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-24 09:59:18

对于您的场景,您只需要为用户(订阅者)提供一个表:

代码语言:javascript
复制
|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的链接,与他的朋友共享该链接如下:

代码语言:javascript
复制
www.domain.com/users/sign-up?referred_by=5

然后,当任何人打开该链接时,带有单个数据库查询的sing up操作将创建一个新用户,其referred_by值等于5(引用者的id ):

代码语言:javascript
复制
User.create!(email: 'xyz@x.com',... ,referred_by: 5) 

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

代码语言:javascript
复制
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

然后,在任何时候,您都希望获得某个用户所指的用户数量:

代码语言:javascript
复制
user.number_of_referred_users

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

代码语言:javascript
复制
user.referrer
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41311519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档