2012-03-16 19 views
8

उपयोगकर्ता के पास_एमनी सॉल्यूशंससंबंधित मॉडल (रेल) की उच्चतम गिनती कैसे प्राप्त करें?

मैं सबसे अधिक समाधान वाले उपयोगकर्ताओं द्वारा उपयोगकर्ताओं को कैसे ऑर्डर करूं?

मैं शीर्ष दस उपयोगकर्ताओं को खोजने की कोशिश कर रहा हूं लेकिन मुझे यकीन नहीं है कि यह करने का सबसे आसान या कुशल तरीका कैसा है?

क्या किसी के पास ऐसा उदाहरण है जो बहुत कम्प्यूटेशनल रूप से महंगा नहीं है?

उत्तर

4

आप वास्तव में इसे करने का एक तेज़ तरीका चाहते हैं, एक उपयोगकर्ताओं के समाधान पर एक counter_cache डाल (अपने User में एक solutions_count स्तंभ है) और इस कॉलम के आधार पर आदेश। आपको उस काउंटर को प्रबंधित करने की आवश्यकता नहीं है, क्योंकि रेल आपके लिए यह करती है। आप नीचे दिए गए मॉडल

class User 
    has_many :solutions 
end 

class Solution 
belongs_to :user 
end 

तो सबसे अच्छा तरीका यह द्वारा solutions_count और व्यवस्था counter_cache है मान लिया जाये कि 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 स्तंभ मत भूलना।