попробуйте это:
Character.find_by_sql("SELECT *, rank() OVER (ORDER BY points DESC) FROM characters")
он должен вернуть вам объекты персонажей с атрибутом ранга, как описано здесь .Однако, это может не зависеть от базы данных и иметь тенденцию запутываться, если вы передаете объекты.
Другое (дорогое) решение - добавить столбец ранга в вашу таблицу и сделать обратный вызов пересчитать ранг всех записей, используя .order, всякий раз, когда запись сохраняется или уничтожается.
edit:
Другая идея, подходящая для запросов с одной записью, может быть замечена здесь