2012-03-16 5 views
8

Un usuario has_many Soluciones¿Cómo obtener el conteo más alto del modelo asociado (Rails)?

¿Cómo solicito usuarios a quienes tienen más soluciones?

Estoy tratando de encontrar a los diez primeros usuarios, pero no estoy seguro de cómo la forma más ordenada y eficiente de hacer esto?

¿Alguien tiene un ejemplo que no es demasiado costoso desde el punto de vista informático?

Respuesta

4

Si realmente quiere una manera rápida de hacerlo, poner un counter_cache en las soluciones de un usuario (tener una columna solutions_count en su User) y el orden por esa columna. No necesita administrar ese contador, porque Rails lo hace por usted. Puede leer más sobre counter_cache en el Rails Guides

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

Suponiendo los siguientes modelos

class User 
    has_many :solutions 
end 

class Solution 
belongs_to :user 
end 

A continuación, la mejor manera es counter_cache la solutions_count y el orden por ella. more on counter_cache

La consulta será entonces

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

No se olvide de índice de la columna solutions_count.

Cuestiones relacionadas