class Foo < ActiveRecord::Base {
has_many :bars
}
foo = Foo.find(1)
foo.bars.count
これはバーの数を数える最良の方法ですか、それとも効率的な方法はありますか
class Foo < ActiveRecord::Base {
has_many :bars
}
foo = Foo.find(1)
foo.bars.count
これはバーの数を数える最良の方法ですか、それとも効率的な方法はありますか
モデルが完全に正規化されている場合、これが最も効率的な方法になります。
これを頻繁に行う必要がある場合は、bars
カウントをFoo
テーブルにキャッシュできます。
Railscast のエピソード 23では、カウンター キャッシュについて説明しています。この情報は、現在の Rails バージョンでも正しいものです。
はい、ActiveRecord が適切な SELECT COUNT(*) SQL 文に変換するため、これが最も効率的な方法です。これは、すべてのレコード データをロードして配列でカウントするよりもはるかに効率的です。