2010-12-13 7 views
1

を数えます。具体的にはどうしたらいいですか?私のモデルでは、ユーザーおよびコメントで、すべてのユーザーを選択して彼らのコメントで注文して、私はトップ10コメンターを取得するには、コメントの彼らの数が発注するすべてのユーザーを、取得したいRailsアプリケーションで

はお互いにHABTMの関係にあります。

今私が持っている:

all_users = User.all :joins => :comments 
    all_users.sort_by do |user| 
    user.comments.count 
    end 

1人のユーザーが複数のコメントがある場合がありますように私はまだ、これは一人のユーザのための複数のエントリを提供しているという事実で立ち往生しています。そして、私はまだ最初の10人のユーザーだけを取得する必要があります。例えば、このを行うには、より効率的な方法だろう何

クエリ自体に?

おかげ

答えて

1

それはあなたのDBのパフォーマンスにヒットしない場合は、常に

User.all(:joins => :comments, :group => 'users.id', :order => 'count(*)') 

を行うことができます

+0

おかげで、それは私がまさに必要でした! – slhck

3

あなたは、このように構成されたコメントモデルであなたのbelongs_to :userを持っていた場合:

belongs_to :user, :counter_cache => true 

そして、あなたのusersテーブルに0をデフォルトcomments_count整数フィールドを持っていた、あなたはできるようになりますむしろ参加を行うに持つよりも、それによって注文します。

+0

を、ライアン、ありがとうございました。私の特定のセットアップでは、 'User'と' Comment'は、互いにHABTM関係にあるので、私はその後、何をしますか? – slhck

関連する問題