ProjectモデルとProjectGroupモデルがあり、ProjectGroupモデルはProjectモデルを継承しています。
# Project
class Project < ActiveRecord::Base
has_and_belongs_to_many :child_projects
end
# ProjectGroup inherit Project
class ProjectGroup < Project
has_and_belongs_to_many :projects
has_and_belongs_to_many :docs
# ProjectGroup is Project.where(:type => ''ProjectGroup)
end
プロジェクト モデルには has_and_belongs_to_many ドキュメントがあり、プロジェクト モデルと ProjectGroup (as Project.where(:type => 'ProjectGroup')) をドキュメントの数で並べ替えたい
プロジェクト モデルのドキュメント数は、プロジェクトに関連するドキュメントの数です。一方、プロジェクト グループ モデルのドキュメント数は、プロジェクト グループに関連するすべてのプロジェクトに関連するドキュメントの数です。
モデルごとにドキュメント数でスコープを書きましたが、結合条件のみが異なります。
joins メソッドが複雑すぎることはわかっているので、気になる場合はこれらのメソッドを無視してかまいません。
# Project model
scope :order_pmdocs_count,
joins("
LEFT OUTER JOIN projects_sprojects ON projects_sprojects.sproject_id = projects.id
LEFT OUTER JOIN docs_projects ON docs_projects.project_id IN (projects_sprojects.project_id)
LEFT OUTER JOIN docs ON docs.id = docs_projects.doc_id AND docs.sourcedb = 'PubMed'
").group('projects.id').order("count(docs.id) DESC")
# ProjectGroup model
scope :order_docs_count,
joins("
LEFT OUTER JOIN projects_sprojects ON projects_sprojects.sproject_id = projects.id
LEFT OUTER JOIN docs_projects ON docs_projects.project_id IN (projects_sprojects.project_id)
LEFT OUTER JOIN docs ON docs.id = docs_projects.doc_id AND docs.sourcedb = 'PubMed'
").group('projects.id').order("count(docs.id) DESC")
これらの結合方法を切り替えたり組み合わせたりして、Project モデルと ProjectGroup モデル (Project モデルとして) をドキュメントの数で並べ替えることはできますか?
または、これらのモデルを各カウント方法で注文する別の方法はありますか?