Ruby on rails 随着时间的推移跟踪追随者

Ruby on rails 随着时间的推移跟踪追随者,ruby-on-rails,ruby-on-rails-3,database-design,Ruby On Rails,Ruby On Rails 3,Database Design,我想在我的Rails应用程序中构建能够显示随时间变化趋势的功能 目前,我的following方法涉及创建和销毁关系对象——following创建一个具有跟随者ID的对象,following和unfollowing删除该关系对象 由于relationship对象在unfollow时被删除,因此不可能回过头来查看在任何给定时间存在多少追随者 要解决这个问题,我能想到的最佳解决方案是: 与其在展开后删除关系对象,不如创建一个负值为-1的新对象。下面将创建一个正值为+1的对象。因此,将给定对的总值相加将

我想在我的Rails应用程序中构建能够显示随时间变化趋势的功能

目前,我的following方法涉及创建和销毁关系对象——following创建一个具有跟随者ID的对象,following和unfollowing删除该关系对象

由于relationship对象在unfollow时被删除,因此不可能回过头来查看在任何给定时间存在多少追随者

要解决这个问题,我能想到的最佳解决方案是:

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

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


任何帮助都将不胜感激

我会添加一个活动字段,然后将记录设置为非活动,而不是删除关系记录。然后,您必须更新所有面向用户的查询,以反映active=1。然后,您可以将active=0的记录用于报告目的。您还可以添加一个停用的_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

只需使用妄想症


我喜欢这个想法(对大多数人来说,这可能是最好的解决方案),但我尽量避免使用第三方gems。。。我用过的一些插件落后了,后来又破坏了我的应用程序,它们的文档太差了,我无法接受。当然,你必须仔细选择你使用的插件,但不要重新发明轮子<代码>偏执狂是48行代码,所以你可以在需要的时候破解它。没错,我会看看它,看看我是否可以使用它的某些部分来满足我的需要。我也在投票支持你的答案!我认为这是限制数据库条目并保留其功能的最好方法。谢谢为什么您需要处于活动状态和非活动状态的_?
class Relationship < ActiveRecord::Base
  acts_as_paranoid

  ...
end
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