2012-03-16 2 views
8

Aユーザーhas_many Solutions関連付けられたモデル(Rails)の最大数を取得するにはどうすればよいですか?

ほとんどのソリューションを持つユーザーをユーザーに注文するにはどうすればよいですか?

私はトップ10のユーザーを見つけようとしていますが、これを行うための最もきれいで効率的な方法がわかりません。

計算コストがあまり高くない例はありますか?

答えて

4

あなたが本当にそれを行うための高速な方法をしたい場合は、ユーザーのソリューション(あなたUsersolutions_count列を持っている)と、その列で順番にcounter_cacheを置きます。レールはあなたのためにそれをするので、あなたはそのカウンタを管理する必要はありません。あなたはその後、最良の方法は、それによってsolutions_countと秩序をcounter_cacheすることで、次のモデルに

class User 
    has_many :solutions 
end 

class Solution 
belongs_to :user 
end 

を想定しRails Guides

18
User 
    .joins(:solutions) 
    .select("users.*, count(solutions.id) as scount") 
    .group("users.id") 
    .order("scount DESC") 
4

counter_cacheについての詳細を読むことができます。 more on counter_cache

クエリは、

User.order("users.solutions_count DESC").limit(10) 

インデックスにsolutions_count列を忘れてはいけないだろう。

関連する問題