probeer dit:
Character.find_by_sql("SELECT *, rank() OVER (ORDER BY points DESC) FROM characters")
het zou u Character-objecten moeten retourneren met een rangattribuut, zoals gedocumenteerd hier . Dit is echter mogelijk niet database-agnostisch en kan rommelig worden als u de objecten doorgeeft.
een andere (dure) oplossing is om een rangkolom aan uw tabel toe te voegen, en een callback te laten herberekenen met .order wanneer een record wordt opgeslagen of vernietigd.
bewerken:
een ander idee dat geschikt is voor zoekopdrachten met één record kan hier worden gezien