2012-04-02 8 views
1

最も高いコメントを持つユーザーを選択したかったのですが、Rails ActiveRecord - ほとんどのコメントを持つユーザーを選択

コメントは関係にあります。

私はそれらを通じ照会できます

User.first.comments 

は今、私はほとんどのコメントを持つユーザーを選択したかったです。

非常に時間がかかるため、私はUser-Table全体をループしたくありません。

たぶん、このような何か:

User.joins(:comments).find(:all, :order => "COUNT(comments) desc") 

しかし、これは動作しません。

解決策がない場合は、外部テーブルにキャッシュします。

答えて

8

あなたはそのためのカウンターキャッシュを使用する必要があり、ここでの例です:

class User < ActiveRecord::Base 
    has_many :comments 
end 

class Comment < ActiveRecord::Base 
    belongs_to :user, :counter_cache => true 
end 

次にあなたがユーザーテーブルにcomments_count列を追加する必要がありますし、いつでも新しいコメントがユーザーこれを使用して作成されましたフィールドは自動的にインクリメントされます。結局、あなたのクエリは次のようになります:

User.order("comments_count desc").limit(10).all 
関連する問題