私のモデルは次のようになります。
class Movie < ActiveRecord::Base
attr_accessible :title, :year, :rotten_id, :audience_score,
:critics_score, :runtime, :synopsis, :link, :image
has_many :jobs, :dependent => :destroy
has_many :actors, :through => :jobs
end
class Actor < ActiveRecord::Base
attr_accessible :name
has_many :movies, :through => :jobs
has_many :jobs, :dependent => :destroy
end
class Job < ActiveRecord::Base
attr_accessible :movie_id, :actor_id
belongs_to :movie
belongs_to :actor
end
俳優のインデックスを表示するときに、各俳優が主演した映画の数を表示したいと思います。これはで実行できますが@actor.movies.count
、これにより、のSQLクエリが生成されますeach actor
。たとえば、アクターが30人の場合、これにより、イニシャルに加えて30個の追加クエリが発生します。
Actor.all
各俳優が参加した映画の数を最初の電話に含める方法はありますか?そしてそれにより、たった1回の呼び出しで物事を成し遂げることができます。これが上記のカウントでソートされている場合、追加のボーナス。
更新:
提供されたすべての回答は役に立ちました。ある時点でダートスリングコンテストになりましたが、うまくいきました。私はあなたのすべての提案のミッシュマッシュをしました。アクターモデルにmovies_counter列を追加しました。私のジョブモデルに追加しましbelongs_to :actor, :counter_cache => :movies_counter
た。これは見事に機能し、ムービーを作成または破棄すると、コードを追加しなくても自動的に更新されます。