我正在尝试根据推荐来奖励用户。问题在于,新注册的用户也有望对其推荐人的推荐人进行奖励(奖励的一半)。
让我们说A指B(B签约),A得1分。 B代表C(C签约),B得1分,A得0.5分(因为B被A引荐)。 因此:A得1 + 0.5点,B得1点(参考C)。
B代表D,C代表D(D报名) B获得1分(C没有获得分数,因为B首先引用了D)
以此类推...
我想这样跟踪它:
class User
def initialize
refered_by = nil
refered = []
points = nil
end
end
对于该示例,引荐将如下保存:
A.refered_by = nil
A.refered = [B]
B.refered_by = A
B.refered = [C,D]
C.refered_by = B
D.refered_by = B
当然,没有注册不会给分。
类似这样的计算点:
def points
direct_refs = User.where(refered_by: self.id)
total_points = direct_refs.count
direct_refs.each do |i|
next_level_refs = User.where(refered_by: i)
total_points += next_level_refs.count / 2
end
# this should go deep until the user gets all the earned points
return total_points
end
注册后,示例计算点如下:
A.points -> 1 + 0.5 + 0.5 (1 for B, 0.5 for C, 0.5 for D)
B.points -> 1 + 1 (1 for C, 1 for D)
我还考虑过使用树,但不知道怎么做。
任何见解或我能阅读的文档都非常感谢。
答案 0 :(得分:0)
我认为这可行!
如果您在数据库中创建了一个称为Referrals的表,该表基本上存储一列,即一个json哈希,每个值都是一个数组,该表会记录所有引用和用户。因此,例如,{A: [B, E], B: [C], C: [D], D: [] E: []}
然后在计算点时,将他们所推荐的人所拥有的所有点取一半,然后对其进行解析。因此,A引用B会得到1分,但它也会加上.75,因为B会引用C引用了D。因此,如果追溯到过去,C = 1 +((D的引荐数,0)/ 2),并且B = 1 +(((C的引荐数,1)/ 2),A = 1 +((B的引介数,1.5)/ 2)然后A等于1.75,但是由于我也加了E,所以它将是另一个1分。
我希望这是您要寻找的!如果没有让我知道!
C = 1,B = 1 +(1/2),A = 2 +(1.5 / 2)