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

问题描述 投票:0回答:3

我有这三款

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

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

ruby-on-rails rails-activerecord
3个回答
0
投票

如果用户有

groups
关联,则表示有
group_ids
方法

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

你也可以显式提取这样的ID

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

0
投票

实现此目的的一种方法是使用 ActiveRecord 中的“where”方法。

例如:

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 方法。 ”


0
投票

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

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

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

groups = Group.where(id: group_ids)
© www.soinside.com 2019 - 2024. All rights reserved.