解決できない複雑なクエリを含む Rails アプリがあります。2 つのテーブル、クラブ、セレクションがあります。テーブル クラブは次のようなものです。
id,name
1,A
2,B
3,C
4,D
テーブルの選択には、すべてのユーザーがテーブル クラブから選択したクラブが含まれます。
id,club_id,user_id
1,1,1
2,1,2
3,2,3
4,3,1
5,3,3
ここで、現在のユーザーが要素を選択していないテーブル クラブのすべてのアイテムを含む選択ボックスが必要です (同じクラブを 2 回選択することはできません)。したがって、ユーザー 1 の場合、クラブ A と C を既に選択しているため、クラブ B と D のみが表示されます。
だから私はこれをモデルのスコープとして作成しました:
scope :selectable, ->(current_user) {
joins('LEFT OUTER JOIN selections ON selections.club_id = clubs.id').
where('selections.id IS NULL OR selections.user_id != ?', current_user.id).
group('clubs.id')
}
これは、選択を行っているユーザーが 1 人しかいない場合は正常に機能しますが、現在のユーザーと同じクラブを選択したユーザーがさらにいる場合、これらのクラブは引き続き表示されます。正しいクラブを表示するには、何を改善すればよいですか?