J'ai des modèles et User
joints par un modèle Membership
. Je veux récupérer les membres d'un projet sauf un utilisateur.Ajout d'une portée à une association has_many through dans Rails
project.members.where.not(id: current_user)
Like this answer, je veux utiliser un champ:
class User < ActiveRecord::Base
scope :except, ->(user) { where.not(id: user) }
end
Mais cela ne fonctionne pas.
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]]
Comme vous pouvez le voir, il en résulte deux requêtes, pas une seule. Et renvoie tous les membres, ne tenant pas compte de l'exclusion.
Pourquoi cela ne fonctionne-t-il pas?
Je pense que le champ que vous recherchez devrait être sur le modèle d'adhésion. Il serait utile que vous ajoutiez les autres définitions de classe et peut-être les colonnes dans la table d'appartenance. – Sean