如果某些用户被删除,我如何计算关注者的实际数量?

时间:2013-07-08 14:47:05

标签: ruby-on-rails ruby-on-rails-3

我正在使用名为acts_as_follower的宝石 假设有3个用户叫John,Mike和Justin。 他们每个人都追随另外两个人。

在Mike辞职后,Mike的User记录将被删除,但Follow记录仍然存在。

user = User.find_by_name(`John`)
@follower_users = user.followers(order: 'updated_at DESC', limit: '10')
@follower_users_count = user.followers(order: 'updated_at DESC').count

@follower_users_count应该返回1,因为只有1个粉丝(因为Mike不再存在)

但是,这会返回“2”,因为它会计算Follow的数量 在这种情况下,如何获得实际的粉丝数量?

1 个答案:

答案 0 :(得分:1)

首先:您使用的是最新版本的acts_as_follower gem吗? 我看一下code,这里与:dependent => :destroy的关系:

has_many :followings, :as => :followable, :dependent => :destroy, :class_name => 'Follow'

因此,在销毁用户之后它不应该是一个问题 - 所有以下关系也将被破坏。如果不是 - 也许您正在使用paranoia gem或类似的东西?请告诉我你的Gemfile。

  

谢谢!如果我不这样做怎么办?我怎么还能算   避免不存在的用户?

如果你不这样做,你可以这样做:

@follower_users_count = user.followers(order: 'updated_at DESC').select{|f| f.user.present? }.count

此外,您可以查看gem code并尝试将users表连接到sql请求并检查是否存在用户。

但是这种方法很糟糕,如果你检查:dependent => :destroy无效的原因会更好。