我正在尝试创建一个命名范围,User.not_in_project(project)
但我找不到正确的方法。
我将用户、项目和职责作为连接模型:
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
我尝试了named_scope
与此 find 子句类似的方法:
User.all(:joins => :duties, :conditions => ['duties.project_id != ?', my_project])
但这不会让我返回没有的用户,my_project
而是拥有除my_project
.
换句话说,我希望命名范围的行为与此方法完全相同:
def self.not_present_in p
self.all.reject{|u| u.projects.include?(p)}
end
我怎样才能做到这一点?