0

解決できない複雑なクエリを含む 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 人しかいない場合は正常に機能しますが、現在のユーザーと同じクラブを選択したユーザーがさらにいる場合、これらのクラブは引き続き表示されます。正しいクラブを表示するには、何を改善すればよいですか?

4

1 に答える 1