のような名前付きスコープを作成しようとして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
どうやってやるの?