我有這三個模型
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
我想以一種干凈的方式查詢用戶不在的所有組。我該怎么做?
uj5u.com熱心網友回復:
一種方法是使用 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 方法。"
uj5u.com熱心網友回復:
如果用戶有groups關聯,則表示它有group_ids方法
Group.where.not(id: user.group_ids)
而且您還可以顯式提取此類 id
Group.where.not(id: Subscribe.select(:group_id).where(user_id: user.id))
uj5u.com熱心網友回復:
您可以找到用戶不存在的所有組 ID,如下所示:
group_ids = Subscribe.where.not(user_id: user.id).uniq
然后通過查詢具有這些 id 的組來查找組記錄:
groups = Group.where(id: group_ids)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/515602.html
標籤:轨道上的红宝石活动记录
上一篇:Firefox與Sharepoint和MSOffice的集成
下一篇:如何使用rake任務檢查狀態
