ruby-on-rails - Rails 中的简单推荐系统

标签 ruby-on-rails ruby

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

系统总体思路如下:

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

这将存储在两个表中:

  • subscribers 表与 |编号 |电邮 |推荐人 |
  • referrals 表与 |编号 | subscriber_id | referrals |,其中 referrals 是订阅者推荐其他订阅者的次数

同样,我想知道如何通过一次提交操作进行两次调用——一次调用新订阅者,一次调用推荐信息。或者,如果这不是最佳方法,如何使用最佳实践来做到这一点。

最佳答案

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

|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 并与他的 friend 分享的链接是:

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

关于ruby-on-rails - Rails 中的简单推荐系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41311519/

相关文章:

ruby-on-rails - Rails 中的 Webrick 服务器错误

ruby-on-rails - 确定 ActiveRecord 在查找过程中是否使用了索引?

ruby-on-rails - Rails-如何在searchkick中添加更多字段以进行过滤?

ruby-on-rails - 在使用 RSpec 进行功能测试时,没有路由匹配 '/users/sign_in'

ruby - 这个属性在 ruby​​ 类中叫什么

ruby-on-rails - NoMethodError : undefined method `to_csv' for ["a", "b"]:数组

ruby-on-rails - Rspec 期望 link_to 没有找到任何东西

ruby - 在 Postgres/Ruby 中比较日期和月份

ruby - 字典=哈希?

ruby-on-rails - 测试设计不可或缺