zkuste toto:
Character.find_by_sql("SELECT *, rank() OVER (ORDER BY points DESC) FROM characters")
měl by vám vrátit objekty znaků s atributem hodnosti, jak je zdokumentováno zde . To však nemusí být agnostické pro databázi a má tendenci být zmatené, pokud procházíte kolem objektů.
dalším (nákladným) řešením je přidat do tabulky sloupec pořadí a nechat zpětné volání přepočítat pořadí všech záznamů pomocí .order, kdykoli je záznam uložen nebo zničen.
upravit:
další nápad vhodný pro dotazy s jedním záznamem můžete vidět zde