我正在使用 postgres 并希望从另一个表中排除当前在一个表中的用户。目前我正在尝试通过 Rails 中的 ActiveRecord 系统来做到这一点。
所以我需要它从我的可用性表中获取 id,然后将该 id 返回到我的用户表中以删除它们(如果它们在可用性表中)。
@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])