J'essaye de créer une portée nommée comme User.not_in_project(project)
mais je ne peux pas trouver la bonne manière.Complicated named_scope: Trouver des utilisateurs qui n'appartiennent pas à un certain projet
J'ai des utilisateurs, projets et devoirs en tant que modèle se joindre à:
class User < ActiveRecord::Base
has_many :duties, :extend => FindByAssociatedExtension
has_many :projects, :through => :duties
end
class Duty < ActiveRecord::Base
belongs_to :user
belongs_to :project
end
class Project < ActiveRecord::Base
has_many :duties
has_many :users, :through => :duties
end
J'ai essayé avec un named_scope
similaire à cette clause trouver:
User.all(:joins => :duties, :conditions => ['duties.project_id != ?', my_project])
Mais cela ne me retourne pas les utilisateurs qui n'ont pas my_project
mais les utilisateurs qui ont un projet autre que my_project
.
En d'autres termes, je veux que le champ nommé de se comporter exactement comme cette méthode:
def self.not_present_in p
self.all.reject{|u| u.projects.include?(p)}
end
Comment puis-je faire cela?
Que voulez-vous récupérer? Je ne suis pas clair à ce sujet. –
Je veux une portée nommée qui se comporte exactement comme cette méthode: def self.not_present_in p self.all.reject {| u.projects.include? (p)} end Je veux qu'il retourne les utilisateurs qui n'ont pas de projet passé en argument. Aidez-nous? –
J'ai édité la question pour contenir la clarification ci-dessus car elle contient le code source. –