これを試してください:
Character.find_by_sql("SELECT *, rank() OVER (ORDER BY points DESC) FROM characters")
こちらに記載されているように、ランク属性を持つCharacterオブジェクトが返されます。 a> 。ただし、これはデータベースに依存しない可能性があり、オブジェクトを渡すと面倒になる傾向があります。
別の(高価な)解決策は、テーブルにランク列を追加し、レコードが保存または破棄されるたびに、コールバックで.orderを使用してすべてのレコードのランクを再計算することです。
編集:
単一レコードのクエリに適した別のアイデアは、 こちらでご覧いただけます。