モデルの定義:
class Article < ActiveRecord::Base
has_and_belongs_to_many :groups
end
class Group < ActiveRecord::Base
has_and_belongs_to_many :articles
has_many :domains, :inverse_of=>:group
end
class Domain < ActiveRecord::Base
belongs_to :group, :inverse_of=>:domains
has_many :pages, :inverse_of=>:domain
end
class Page < ActiveRecord::Base
belongs_to :domain, :inverse_of=>:pages
belongs_to :article, :inverse_of=>:pages
end
具体的には、に関連付けられていないすべて(を介して関連付けられている)Article
を選択したいと思います。Domains
groups.domains
Page
Article
class Article < ActiveRecord::Base
has_and_belongs_to_many :groups
def avaiable_domains
groups.domains("where not exists page with article_id=#{id}")) ##????
#I have code mentioned at the end of this question, but I don't want use SQL, just pure active query
end
end
純粋なActiveRecordクエリまたはArel(whereメソッドにSQLなし)で書き込むことは可能ですか?
今のところ私はこれを使用しています:
Domain.where(:group_id=>group_ids).where('NOT EXISTS(SELECT 1 FROM pages WHERE pages.domain_id=domains.id AND article_id=?)',id)