2010-05-11 10 views

Odpowiedz

19

Aby uzyskać rangę użytkownika,

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

To powinno dać indeks (Ranking) danego użytkownika w tablicy wszystkich użytkowników (uporządkowana wg bilansu).

+0

dziękuję, mój problem został rozwiązany – fenec

3

Gdybym zrozumiał, co chcesz, wystarczy zamówić użytkownikom równowagi

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

Edit:balance chyba nie jest atrybutem ...

Edit # 2: po zobaczeniu odpowiedzi Drew Johnsona zdałem sobie sprawę, że źle zrozumiałem twoje pytanie. Jak powiedział, możesz użyć metody index, aby zrobić to, co chcesz.

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

Dziękuję, mój problem został rozwiązany – fenec

5

kilka dni temu poprosiłem właśnie to samo pytanie

Position of object in database

moje rozwiązanie było tak samo jak @Drew Johnson zasugerował (User.all.index current_user). Ale potrzebowałem „rozwiązanie zapytania” i @Vlad Zloteanu dała mi świetny pomysł:

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

jest to szybkie rozwiązanie zapytanie do dużych tabel danych.

10

Nieco bardziej efektywnym rozwiązaniem, jeśli masz dużo użytkowników:

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

ten sposób, aplikacja pobiera identyfikatory n całkowitych zamiast ciągnięcia i uruchamianiu n całych User pozycji/obiektów. Może szybciej skończyć o rzędy wielkości.

+1

Dzięki tej metodzie moje zapytanie zajęło 30 ms, używanie tylko ".index" przez obiekt użytkownika zajęło 250ms. Bardzo wydajne rozwiązanie! –

Powiązane problemy