gpt4 book ai didi

mysql - 使用 Rails 从组数组中检索拥有所有组的用户

转载 作者:行者123 更新时间:2023-11-30 00:06:37 24 4
gpt4 key购买 nike

我有一个应用程序,其中用户通过 GroupUsers 联接表拥有许多组,并且组拥有许多用户。

我想获取给定组数组的完全所有组中的所有用户。

听起来很简单,但我还没有找到方法。

这是我尝试过的(all_groups 是组数组):

users = User
all_groups.each do |group|
users = users.joins(:group_users).where("group_users.group_id = ?", group.id)
end

我总是得不到结果,所以我尝试这样做来了解发生了什么:

users = User

group1 = all_groups.first
group2 = all_groups.last

users1 = users.joins(:group_users).where("group_users.group_id = ?", group1.id)
users2 = users1.joins(:group_users).where("group_users.group_id = ?", group2.id)

users1 是一个数组,其中包含预期的 group1 中的所有用户,但 users2 始终为空。

有人知道如何解决这个问题吗?

编辑:答案:

users = User
all_groups.each do |group|
users = User.including_ids(users.map(&:id)).joins(:group_users).where("group_users.group_id = ?", group.id)
end

在 models/user.rb 中:

scope :including_ids, ->(*ids) {
where(arel_table[:id].in(ids))
}

这并不是很漂亮,但它确实有效。

最佳答案

根据您给出的解释,我假设您有类似的内容:

class User
has_many :group_users
has_many :groups, through: :group_users
end

class GroupUser
belongs_to :user
belongs_to :group
end

class Group
has_many :group_users
has_many :users, through: :group_users
end

如果是,您可能可以执行以下操作:

# get groups
groups = Group.where( ......some condition here )

# as long as groups is an ActiveRecord::Relation type you can use 'pluck'
User.joins( :group_users ).where( 'group_users.group_id IN (?)', groups.pluck(:id) ).uniq

希望有帮助。 :)

干杯!

关于mysql - 使用 Rails 从组数组中检索拥有所有组的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24490548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com