我有一个应用,通过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))
}
这不是很漂亮,但它正在发挥作用。
答案 0 :(得分:0)
根据你给出的解释,我假设你有类似的东西:
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
希望有所帮助。 :)
干杯!