Techioz Blog

Rails - 特定のレコードの下にあるすべてのレコードを並べ替えて取得します

概要

SampleGroup というテーブルがあり、そこに year という列があります。年には、year_1、year_2 などの値を指定できます。

SampleGroup テーブルには、年の列に基づいてレコードを並べ替える位置もあります。テーブルはいつもこんな感じになります。

| year     | position        |
| -------- | --------------  |
| year_1   |0                |
| year_2   |1                |
| year_3   |2                |
| year_4   |3                |

たとえば、特定の年よりも古いすべてのレコードを取得したいと考えています。

year_3 が指定された場合、クエリは year_3 より下のすべてのレコードをフェッチし、year_3 が返される必要があります。これを達成するための最良の方法は何でしょうか?

解決策

これは 2 つのクエリで実現します。まず一致するレコードをフェッチし、次にその下にあるすべてのレコードをフェッチします。

year = 'year_3'
sample_group = SampleGroup.find_by(year: year)
SampleGroup.where('position <= ?', sample_group.position)