2012-03-16 12 views
8

Użytkownik ma wiele rozwiązańJak uzyskać najwyższą liczbę skojarzonego modelu (szyny)?

Jak zamówić użytkowników przez osoby, które mają najwięcej rozwiązań?

Próbuję znaleźć dziesięciu najlepszych użytkowników, ale nie jestem pewien, jak najbardziej uporządkowany lub skuteczny sposób to zrobić?

Czy ktoś ma przykład, który nie jest zbyt kosztowny pod względem obliczeniowym?

Odpowiedz

4

Jeśli naprawdę chcesz szybki sposób to zrobić, umieścić counter_cache nad rozwiązaniami dla użytkowników (posiada kolumnę solutions_count w User) i kolejność według tej kolumny. Nie musisz zarządzać tym kontuarem, ponieważ szyny robią to za Ciebie. Możesz przeczytać więcej o counter_cache w Rails Guides

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

Zakładając następujące modele

class User 
    has_many :solutions 
end 

class Solution 
belongs_to :user 
end 

to najlepszym sposobem jest counter_cache się solutions_count i porządku przez niego. more on counter_cache

Kwerenda będzie wtedy

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

Nie zapomnij indeksu kolumny solutions_count.

Powiązane problemy