2010-12-16 17 views
1

を必要な回数、私は以下の原型モデルがあるとします。ブログ、ポスト、コメント、カテゴリ。ブログhas_many投稿、投稿has_manyコメントとbelongs_toカテゴリ。ActiveRecordのグループ化/私はRailsの3</p> <p>を使用していますクエリのヘルプが

各カテゴリにいくつの投稿があるのか​​を知りたいのですが、コメントがあるものだけカウントしています。

私は次のような場合:

blog.posts.group("category_id").count 

- このは私が必要なものに近いですが、もちろん問題はカウント値がコメントを持っていない記事が含まれているOrderedHashを与えます。

私が行う場合:

blog.posts.group("category_id").joins("comments").count 

- このは私にそのカテゴリの記事にはコメントの数を(それは私がグループ化する前に参加を置けば同じことを)提供します。

ありがとうございました。

答えて

0

あなたの質問をシンプルで読みやすくするためのシンプルなオプションは、投稿後の関連付けにcounter_cacheを設定することで、あなたの検索にwhere("comments_count > 0")を追加するだけです。

+0

おかげでこれをハッキング提案。私はこのオプションを使うつもりだと思っていますが、これを行うARメソッドの組み合わせがあるかどうか不思議です。 –

1

「お試し」をお試しください。ただ....一緒に素早くために何かのように変換でしょう

Post.select("posts.id, posts.category_id, count(comments.id)").join(:comments).group('posts.category_id').having('count(comments.id) > 0') 

...

select posts.id, posts.category_id, count(comments.id) from posts join comments on posts.id = comments.post_id group by posts.category_id having count(comments.id) > 0 

はこの小さなビットに反復処理する必要があるかもしれません...

+0

( "join"を "join"に変更してコンパイルした後)..これは、各カテゴリから1つの投稿のPost idとCategory idを返します。 –

+0

右ジョイン。謝罪。 'count(comments.id)as foo'を追加する必要があります。返された投稿オブジェクトにfooを設定し、そのカテゴリのコメント数を表します。はい - 例はすべての投稿の周りに囲まれていました - 今あなたのブログ、blog.postsの範囲です。 – Cory

関連する問題