我有Groups
的集合,Users
的集合以及GroupUsers
的集合,其中包含2个字段:group_id
和user_id
。
我想找到所有拥有我在数组中指定的所有用户的组。
实施例。如果我这样做:
group1 << user1
group1 << user2
当我尝试查找包含user1
,user2
和user3
的群组时,我不会得到任何结果。但是如果想要包含user1
和user2
的群组,我应该得到group1
。
我试过了:
GroupUser.where(:user.in => [user1, user3]).group_by(&:group)
但是这会返回group1
,因为user1
是该群组的成员。
感谢您的帮助。
答案 0 :(得分:0)
我们终于找到了解决方案:
class Group
embeds_many :users, class_name: "GroupUser"
scope :with_status, -> (status) do
where(:"users.status" => status )
end
end
class User
end
class GroupUser
embedded_in :group
belongs_to :user
end
然后
Group.where(:"users.user_id".all => [user1.id, user2.id])
非常感谢你的帮助。
答案 1 :(得分:-1)
(仅限ActiveRecord):您可以在Group
课程中定义此范围,同时使用having
和group
语句:
class Group < ActiveRecord::Base
scope :with_all_users, ->(users) do
joins(:users)
.where(users: {id: users.map(&:id)})
.group('groups.id')
.having('count(users.id) = ?', users.size)
end
end
然后你可以像这样使用它来获得所有拥有你作为数组或集合提供的所有用户的组:
Group.with_all_users([user1, user2, user3])
答案 2 :(得分:-1)
您似乎只需使用all
代替in
。请参阅selection doc中的第一个条目。
可查询所有#
添加$ all选择。文档必须符合中提供的所有值 阵列
queryable.all(field: [ 1, 2, 3 ])