質問

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

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

以下のことを考えると:

class Article
  has_many :comments
end

class Comment
  belongs_to :article
end

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

役に立ちましたか?

解決

次のような SQL を使用すると、厄介なことができます。

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

そうすれば、Article.first.count_comments にアクセスできるようになります。

これを行うための別の (より良い) 方法は、「c​​ounter_cache」機能/オプションを使用することです。 属する 協会。

他のヒント

あなたがこのためにカウンターキャッシュを使用することができませんか?

belongs_to :article, :counter_cache => true

また、列を追加し、移行を持っている必要がありcomments_count

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top