2010-05-11 15 views

Respuesta

19

Para obtener el rango de un usuario,

Users.all(:order => "balance").index(a_particular_user) 

Esto debe darle el índice (rango) de un usuario en particular dentro de la matriz de todos los usuarios (ordenados por el equilibrio). Hace

+0

gracias, mi problema es fija – fenec

3

Si he entendido lo que quiere, sólo tiene que pedir a los usuarios por el equilibrio

User.all(:order => "balance") 

Editar:balance menos no es un atributo ...

Edición # 2: después de ver la respuesta de Drew Johnson, me di cuenta de que no entendía bien tu pregunta. Como dijo, puedes usar el método index para hacer lo que quieras.

@user = User.first 
@rank = User.all(:order => "balance").index(@user) 
+0

gracias, mi problema es fijo – fenec

5

pocos días le he pedido a la misma pregunta

Position of object in database

mi solución era lo mismo que @Drew Johnson sugirió (User.all.index current_user). Pero necesitaba "solución de consulta" y @Vlad Zloteanu me dio una gran idea:

User.count(:order => "balance", :conditions => ['balance < (?)', current_user.balance]) 

esta es la solución de consulta rápida para las grandes tablas de datos.

10

una solución ligeramente más eficiente si usted tiene una gran cantidad de usuarios:

Users.order(:balance).pluck(:id).index(a_particular_user_id)` 

esta manera, su aplicación va a buscar los identificadores de n enteros en vez de tirar y crear instancias de n enteros User registros/objetos. Podría terminar órdenes de magnitud más rápido.

+1

Con este método se llevó a mi consulta 30 ms, usar solo ".index" a través del objeto del usuario, tomó 250ms. ¡Solución muy eficiente! –