私は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])