如何查找未关联的记录Rails Activerecord



我有这三种型号的

class User < ApplicationRecord
has_many :subscribes
has_many :groups, through: :subscribes
end
class Group < ApplicationRecord
has_many :subscribes
has_many :users, through: :subscribes
end
class Subscribe < ApplicationRecord
belongs_to :user
belongs_to :group
end

我想以一种干净的方式查询用户不在的所有组。我该怎么做?

如果用户具有groups关联,则表示其具有group_ids方法

Group.where.not(id: user.group_ids)

而且你也可以显式地提取这样的ids

Group.where.not(id: Subscribe.select(:group_id).where(user_id: user.id))

实现这一点的一种方法是使用;其中";方法。

例如:

Group.where("id NOT IN (?)", user.groups.map(&:id))

这将为您提供用户不在的所有组。

您也可以为此使用子查询:

Group.where("id NOT IN (SELECT group_id FROM subscribes WHERE user_id = ?)", user.id)

这将得到与上一个示例相同的结果,但不使用.map方法。">

您可以找到用户不在的所有组ID,如下所示:

group_ids = Subscribe.where.not(user_id: user.id).uniq

然后通过查询具有以下id的组来查找组记录:

groups = Group.where(id: group_ids)

最新更新