0

私はpostgresを使用しており、現在あるテーブルにいるユーザーを別のテーブルから除外したいと考えています。現在、Rails 内の ActiveRecord システムを介してこれを実行しようとしています。

そのため、Availability テーブルから ID を取得し、その ID を User テーブルに返して、Availability テーブルにある場合はそれらを削除する必要があります。

@availabilities = Availability.where(:event_id => params[:id]).all
@players = User.where('team_id = ? and id <> ?', current_user[:team_id], @availabilities).all

これは次のエラーを返しています

PG::Error: ERROR:  argument of WHERE must be type boolean, not type record
LINE 1: SELECT "users".* FROM "users"  WHERE (team_id = 1 and id <> ...
                                             ^
: SELECT "users".* FROM "users"  WHERE (team_id = 1 and id <> 101,102,103)

以下に示すようにコードを変更しましたが、私がやっている方法はおそらくまだ理想的ではありません

@availabilities = Availability.where(:event_id => params[:id]).all
@exclude = Availability.where(:event_id => params[:id]).select(:user_id).pluck(:user_id)
if @exclude.count > 0
  @players = User.where('team_id = ? and id NOT IN (?)', current_user[:team_id], @exclude).all
else
  @players = User.where('team_id =?', current_user[:team_id])
4

2 に答える 2

4

次のようなことができます。

@availabilities = Availability.where(event_id: params[:id]).pluck(:id)
@players = User.where(team_id: current_user[:team_id])
@players = @players.where('id NOT IN (?)', @availabilities) unless @availabilities.empty?

を使用pluck()すると ID の配列が返され、使用してそれらを除外できます。NOT IN (?)

于 2013-02-10T05:53:50.103 に答える
1

試す:

id not in

pg エンジンがそれを認識する方法は ((team_id=1 and id <> 101), 102, 103) です。したがって、表示されるエラー。

次のように使用します。

User.where('team_id = ? and id not in (?)', current_user[:team_id], @availabilities).all
于 2013-02-10T05:53:42.447 に答える