gpt4 book ai didi

ruby-on-rails - rails 只加入那些所有成员都年满 18 岁的组

转载 作者:行者123 更新时间:2023-11-29 14:13:32 26 4
gpt4 key购买 nike

我有一个名为 User 的模型,通过与 Group 的关系具有 has_many用户:

class User < ApplicationRecord
has_many :user_groups, dependent: :destroy
has_many :groups, through: :user_groups
end

组:

class Group < ApplicationRecord
has_many :user_groups, dependent: :destroy
has_many :users, through: :user_groups
end

用户组:

class UserGroup < ApplicationRecord
belongs_to :user
belongs_to :group
end

我想找到所有用户都年满 18 周岁的群组。我试过类似的东西

Group.joins(:users).where("users.age >?",18)

但是它给出了重复的结果,

Like a group named "group A" has 3 users with age 17,20,21 then it returns me "group A" two times, and only ignore one instance which has age 17.

如果其中任何成员未满 18 岁,我不想返回此组。

我怎样才能做到这一点?

最佳答案

更容易识别您不想要的组,所以我可能会这样做

class Group < ApplicationRecord
# ...
scope :mature, -> {
excluded_ids = UserGroup.joins(:users).where('users.age <= ?', 18).select(:group_id)
where.not(id: excluded_ids)
}
end

然后

=> Group.mature.to_a

将只生成一个带子选择的数据库请求。

关于ruby-on-rails - rails 只加入那些所有成员都年满 18 岁的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57180673/

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