跟踪推荐用户的奖励

时间:2019-08-14 10:18:19

标签: ruby

我正在尝试根据推荐来奖励用户。问题在于,新注册的用户也有望对其推荐人的推荐人进行奖励(奖励的一半)。

让我们说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)

我还考虑过使用树,但不知道怎么做。

任何见解或我能阅读的文档都非常感谢。

1 个答案:

答案 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)