2010-05-11 4 views

Antwort

19

Um den Rang eines Benutzers zu erhalten,

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

Dies sollten Sie den Index (Rang) eines bestimmten Benutzers innerhalb des Arrays von allen Benutzern geben (nach Balance sortiert).

+0

danke, mein Problem behoben ist – fenec

3

Wenn ich verstanden, was Sie wollen, müssen Sie nur die Benutzer von Balance bestellen

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

Edit: es sei denn balance ist kein Attribut ...

Edit # 2: Nachdem ich Drew Johnsons Antwort gesehen hatte, wurde mir klar, dass ich deine Frage falsch verstanden hatte. Wie er sagte, können Sie die index Methode verwenden, um zu tun, was Sie wollen.

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

danke, mein Problem ist fest – fenec

5

paar Tagen habe ich nur gefragt, die gleiche Frage

Position of object in database

meine Lösung war genau das gleiche wie @Drew Johnson vorgeschlagen (User.all.index current_user). Aber ich brauchte „query Lösung“ und @Vlad Zloteanu hat mir große Idee:

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

dies schnell Abfrage Lösung für große Datentabellen.

10

Eine etwas effizientere Lösung, wenn Sie viele Benutzer haben:

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

Auf diese Weise Ihre App holt n integer IDs anstelle des Ziehens und n ganze User Aufzeichnungen/Objekte instanziieren. Könnte um Größenordnungen schneller sein.

+1

Mit dieser Methode meiner Anfrage 30 ms dauerte, die Verwendung von ".index" durch das Benutzerobjekt dauerte 250ms. Sehr effiziente Lösung! –