Saya pikir Anda bisa mendapatkan semua id grup itu dari grup pengguna di mana jenis kelamin pengguna adalah female
dan gunakan dengan NOT IN
klausa, untuk memfilter semua grup yang cocok dengan id tersebut:
with users(id, gender) as (values (1, 'male'), (2, 'female')),
groups(id, name) as (values (1, '1st'), (2, '2nd')),
user_groups(id, user_id, group_id) as (values (1, 1, 1), (2, 2, 1), (3, 2, 1))
select *
from groups g
where g.id not in (
select ug.group_id
from user_groups ug
inner join users u on u.id = ug.user_id
where u.gender = 'female'
)
Versi ActiveRecord mungkin terlihat seperti ini:
Group.where.not(
id: UserGroup.joins(:user)
.where(users: { gender: 'female' })
.select(:group_id)
)