Я использую postgres и желаю исключить пользователей, которые в настоящее время находятся в одной таблице от другой. в настоящее время я пытаюсь сделать это через систему ActiveRecord в Rails.psql исключая базу записей на другую таблицу
Так что мне нужно, чтобы получить идентификаторы из таблицы доступности, а затем верните этот идентификатор в таблицу пользователя, чтобы удалить их, если они находятся в таблице доступности.
@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])
If вы не хотите удалять базу данных снова, вы можете сделать '@exclude = @ availabilites.map {| a | a.user_id}. –