0

我想在我的 Rails 应用程序中构建功能,以显示随时间推移的追随者趋势。

目前,我的追随方法涉及创建和销毁关系对象 - 追随创建具有追随者 ID 的对象,追随和取消追随删除该关系对象。

由于关系对象在取消关注时被删除,因此不可能返回并查看在任何给定时间存在多少关注者。

为了解决这个问题,我能想到的最好的解决方案是:

与其在取消关注时删除关系对象,不如创建一个负值(例如 -1)的新对象。以下将创建一个正值为 +1 的对象。因此,将给定对的总价值相加将得出他们当前是否关注(1 或 0),而历史趋势也可以通过将给定关注的总关注值相加来计算。

我的问题是:这是这个问题最优雅的解决方案吗?有更简单的方法吗?我意识到可以使用 cron 作业来输出每日数字,但这似乎会重复数据。还有其他建议吗?

任何帮助将不胜感激!

4

2 回答 2

1

我会添加一个活动字段,而不是删除关系记录,而是将记录设置为非活动。然后,您必须更新所有面向用户的查询以反映 active = 1。然后您可以使用 active = 0 的记录进行报告。您还可以添加一个 deactivated_at 字段来存储记录被停用的日期。

一个示例场景是用户 1 关注用户 2,关注用户 3,关注用户 4,取消关注用户 2,重新关注用户 2,取消关注用户 4。

follower_id followed_id active created_at deactivated_at
1           2           0      9/10/2012  9/13/2012
1           3           1      9/10/2012  NULL
1           4           0      9/10/2012  9/17/2012
1           2           1      9/16/2012  NULL
于 2012-10-02T22:43:36.667 回答
1

只需使用paranoia

https://github.com/radar/paranoia

class Relationship < ActiveRecord::Base
  acts_as_paranoid

  ...
end

(如果您在两个数字 ID 列上有唯一索引,请将其删除,使用普通索引)

然后你可以拥有

def currently_following_count(uid)
  Relationship.where(:followed_id => uid).count
end

def historical_following_count(uid)
  Relationship.unscoped.where(:followed_id => uid).count
end
于 2012-10-02T23:16:26.280 回答