我有一个Project
模型User
加入了一个Membership
模型。我想检索一个项目的成员,除了一个用户。
project.members.where.not(id: current_user)
像这个答案一样,我想使用一个范围:
class User < ActiveRecord::Base
scope :except, ->(user) { where.not(id: user) }
end
但这不起作用。
p.members.except(User.find(1))
User Load (1.0ms)
SELECT "users".* FROM "users"
WHERE "users"."id" = $1 LIMIT 1 [["id", 1]]
User Load (0.4ms)
SELECT "users".* FROM "users"
INNER JOIN "memberships" ON "users"."id" = "memberships"."user_id"
WHERE "memberships"."project_id" = $1 [["project_id", 2]]
如您所见,这会导致两个查询,而不是一个。并返回所有成员,不考虑排除。
为什么这不起作用?