3

簡単なタスク: 記事に多くのコメントがある場合、記事の長いリストに各記事のコメント数を表示できます。このデータを Arel でプリロードする方法を考えています。

READMEファイルの「Complex Aggregations」セクションでは、そのような状況について説明しているようですが、サンプル コードが正確に提供されているわけではなく、結合された 1 つのクエリではなく 2 つのクエリで実行する方法も提供されていません。パフォーマンス。

以下を考えると:

class Article
  has_many :comments
end

class Comment
  belongs_to :article
end

それぞれのコメント数を設定した記事をプリロードするにはどうすればよいですか?

4

2 に答える 2

4

これにはカウンターキャッシュを使用できませんか?

belongs_to :article, :counter_cache => true

また、列 comments_count を追加する移行も必要です

于 2010-07-27T20:32:15.583 に答える
2

次のような SQL を使用して厄介なことを行うことができます。

default_scope :select => 'articles.*, (select count(comments.id) from comments where comments.article_id = articles.id) as count_comments'

その後、Article.first.count_comments にアクセスできます。

それを行うための別の (より良い) 方法は、 belongs_to関連付けの 'counter_cache' 機能/オプションを使用することです。

于 2010-04-08T08:41:09.863 に答える