関連モデルに 2 つの特定の ID がある場合、relative_model を含むモデルのデータベースをクエリします。
概要
Rails アプリには、Room、User、および Room と User 間の関連付けテーブルである UsersRoom の 3 つのモデルがあります。 複数のユーザーに関連するルームをクエリしたいと考えています。
私が行った場合:
Room.includes(:users_rooms).where(users_rooms: { user_id: user_ids }
1 つの users_id を含む少なくとも 1 つの users_room を持つすべてのルームを取得します。 user_idごとにusers_roomsが存在するルームを取得したいと考えています。
部屋をクエリした後にループすることなくこれを行うきれいな方法はありますか?
解決策
私なら次のことを試してみます。
Room
.select('rooms.*, COUNT(users_rooms.user_id)')
.joins(:users_rooms)
.where(users_rooms: { user_id: user_ids })
.group('rooms.id')
.having('COUNT(users_rooms.user_id) >= ?', user_ids.size)
ノート: