versuchen Sie Folgendes:
Character.find_by_sql("SELECT *, rank() OVER (ORDER BY points DESC) FROM characters")
es sollte Ihnen Charakterobjekte mit einem Rangattribut zurückgeben, wie hier . Dies ist jedoch möglicherweise nicht datenbankunabhängig und neigt dazu, unordentlich zu werden, wenn Sie die Objekte herumreichen.
Eine andere (teure) Lösung besteht darin, Ihrer Tabelle eine Rangspalte hinzuzufügen und einen Rückruf zu haben, der den Rang aller Datensätze mit .order neu berechnet, wenn ein Datensatz gespeichert oder zerstört wird.
Bearbeiten:
Eine weitere Idee, die für Abfragen einzelner Datensätze geeignet ist, finden Sie hier