0

我正在使用名为acts_as_follower
假设有 3 个用户名为 John、Mike 和 Justin 的 gem。他们每个人都在关注另外 2 个人。

当 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 在这种情况下如何获得实际关注者数量?

4

1 回答 1

1

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

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

所以,这应该不是问题,在销毁用户之后 - 所有以下关系也将被销毁。如果不是 - 也许您正在使用偏执狂宝石或类似的东西?请给我看看你的 Gemfile。

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

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

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

此外,您可以查看gem 代码并尝试将 users 表加入 sql 请求并检查用户是否存在。

:dependent => :destroy但是这种方法是不好的做法,如果你检查为什么不工作,它会更好。

于 2013-07-09T09:46:31.493 回答