SQL で考えると、多数の行 (つまり、そのサブセット) を作成しており、各行にその行のカウントを入れています。
反対側では、合計数が必要です。取得されたレコードのどれがその合計を持つ必要があり、どの列/属性にありますか?
Railsでそれができないのではなく、SQL自体でそれができないということです。結果セットはまったく異なるため、2 つのクエリが必要になるため、2 つの ActiveRecord 呼び出しが必要になります。
これにアプローチする別の方法 (ここでも 2 つの別個のクエリが必要ですが、より単純です) は、次のように counter_cache を使用することです@style.reviews
。
# add a 'reviews_count' integer column to the 'styles' table and use it as
# a counter cache as follows
class Review < AR::Base
belongs_to :style, :counter_cache => true
end
これで、結合を必要とせずにカウントが得られ、単純な合計で合計カウントを取得できます。
補遺: ocounter キャッシュを使用するには、通常どおりstyles
(インクルードまたは結合なしで) テーブルにクエリを実行し、
@style.reviews.size
レビューの数を取得したいときはいつでも。@style
これは別のクエリを作成せず、代わりにインスタンス自体でキャッシュされたカウンターを使用します。