2013-02-10 3 views
0

Я использую 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]) 
+0

If вы не хотите удалять базу данных снова, вы можете сделать '@exclude = @ availabilites.map {| a | a.user_id}. –

ответ

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() возвращает массив идентификаторов, то вы можете исключить их с помощью NOT IN (?)

+0

только проблема у меня есть, если его нуль –

+0

Вы имеете в виду, если массив id пуст? Я обновил свой ответ. –

1

Try:

id not in 

((team_id = 1 и id <> 101), 102, 103). Таким образом, вы видите ошибку.

Используйте его как:

User.where('team_id = ? and id not in (?)', current_user[:team_id], @availabilities).all 
Смежные вопросы