レンダリングに時間がかかるページがあります。時間の半分 (3 秒) は、熱心にロードされたアソシエーションの束を持つ .find 呼び出しに費やされます。私が実際に必要とするのは、テーブルに表示するために、それぞれの場合に関連付けられたレコードの数だけです。実際のレコード自体は必要ありません。カウントを熱心にロードする方法はありますか? 簡単な例を次に示します。
@subjects = Subject.find(:all, :include => [:questions])
私のテーブルでは、各行 (つまり、各科目) について、科目フィールドの値と、各科目に関連する質問の数を表示するだけです。これらの要件に合わせて上記の検索呼び出しを最適化できますか?
グループフィールドを使用することを考えましたが、完全な呼び出しにはいくつかの異なる関連付けが含まれており、いくつかの二次関連付けが含まれているため、group by は機能しないと思います。
@subjects = Subject.find(:all, :include => [{:questions => :tags}, {:quizzes => :tags}], :order => "subjects.name")
この場合の :tags は、タグ付けによる二次的な関連付けです。何が起こっているのかはっきりしない場合に備えて、ここに私の関連付けを示します。
Subject
has_many :questions
has_many :quizzes
Question
belongs_to :subject
has_many :taggings
has_many :tags, :through => :taggings
Quiz
belongs_to :subject
has_many :taggings
has_many :tags, :through => :taggings
アドバイスに感謝します-最大