簡単な例として、書店に著者が 1 人の本があるとします。書籍は受注販売が多い。著者は多くの本を持つことができます。
売り上げ順に著者をリストする方法を探しています。販売は著者ではなく書籍に関連付けられているため、どうすればこれを達成できますか?
私は次のように推測します:
Author.order("sales.count").joins(:orders => :sales)
しかし、それは列が見つからないというエラーを返します。
Author モデルで定義することで、それらを接続することができました。以下は、売上の正しいカウントを表示しますが、すべての作成者に対してデータベースに ping を実行します...まずいです。私はむしろ熱心にロードしたいと思っていますが、self.id を削除して @authors に結合を割り当てると、たまたま売上が 0 の著者がリストされないため、適切に機能するようには見えません。
class Author < ActiveRecord::Base
def sales_count
Author.where(id: self.id).joins(:orders => :sales).count
end
end
より具体的には、最も人気のある著者を最初にリストできるように、カウント結果でそれらを並べ替えるにはどうすればよいですか?