我正在制作一个非常简单的推荐系统,但我看到的问题是,我需要用一个提交操作对DB进行两个不同的调用,而我不知道如何做到这一点。
该系统的总体构想如下:
这将存储在两个表中:
subscribers表的| id | email | referrer |referrals表的| id | subscriber_id | referrals |,其中引用是订阅者引用其他订阅者的次数再次,我想知道如何打两个电话-一个为新的用户,一个为推荐信息-一个单一的提交行动。或者,如果这不是最好的方法,那么如何使用最佳实践来做到这一点。
发布于 2016-12-24 09:59:18
对于您的场景,您只需要为用户(订阅者)提供一个表:
|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然后,当任何人打开该链接时,带有单个数据库查询的sing up操作将创建一个新用户,其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.referrerhttps://stackoverflow.com/questions/41311519
复制相似问题