Edited at

Railsで該当モデルの特定オブジェクトの順位を取得する

ふと、悩んだので皆さんのお考えを伺いたく。

Userモデルが存在し

id
名前(name)
年齢(age)

1
Suzuki
50

2
Sato
30

3
Takahashi
40

4
Motoki
22

5
Nagano
18

というデータ構造とします。

このとき、例えば、Suzukiさんの、年齢順(降順)の順位を取得したいという時があると思います。

答えは、1位ですね。

では、これを取得する方法は、なんでしょうか?

今回、データ数が、多くても、数千件と考えたとき、下記で十分では?

user = User.find_by(name: 'Suzuki')

ranked_ids = User.all.order('age desc').select(:id).map(&:id)
ranking = ranked_ids.index(user.id) + 1

と思うのですが、みなさんいかがでしょうか・・・?

・データ数が多くなると、カラムを追加して、バッチ処理で事前計算しておきたい?

・DBによっては、RANK関数が使えるのでそっち使ったほうが早い?

などなど、いろいろ懸念はあるかなと思います。