我想在我的Rails应用程序中构建功能,以显示随着时间推移的跟随者趋势。
目前,我的以下方法涉及创建和销毁关系对象 - 在创建一个带有关注者ID的对象后,跟随和取消关注删除该关系对象。
由于关系对象在取消关注时被删除,因此无法返回并查看在任何给定时间有多少关注者存在。
要解决这个问题,我能想到的最佳解决方案是:
不是在取消关注时删除关系对象,而是创建一个负值为-1的新对象。以下将创建一个正值为+1的对象。因此,将给定对的总值相加将产生它们当前是否跟随(1或0),而历史趋势也可以通过将给定跟随的总跟随值相加来计算。
我的问题是:这是最优雅的解决方案吗?有更简单的方法吗?我意识到可以使用cron作业输出每日数字,但这似乎会重复数据。还有其他建议吗?
非常感谢任何帮助!
答案 0 :(得分: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
答案 1 :(得分: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