2014-05-16 4 views
0

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?

+0

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

Répondre

Questions connexes