【Rails】offsetメソッドで取得するデータの範囲を指定する方法を解説

offsetの使い方

テーブルからデータを取得する際、どのデータから取得するか(取得開始位置)を指定したい場合offsetメソッドを使います。

先頭は、”0”から始まることに注意

例えば、3レコード目から取得したい場合、以下のように記述します。

モデル名.offset(2)

*[0,1,2] ←三番目のレコード

また、limitメソッドと組み合わせると、取得開始位置を指定した上で取得件数も指定することができます。

#例
モデル名.limit(2).offset(2)

上記だと、3レコード目から二つのレコードを取得できます。

参考例

[前提]name,age,genderの3つのカラムをもつUserテーブル

・Userテーブルの6レコード目から取得したい場合。

[7] pry(main)> User.offset(5)
  User Load (7.6ms)  SELECT `users`.* FROM `users` LIMIT 18446744073709551615 OFFSET 5
=> [#<User:0x000000014269bc28 id: 6, name: "山田", age: 24, gender: "women", created_at: Fri, 19 Nov 2021 10:15:21.818905000 UTC +00:00, updated_at: Fri, 19 Nov 2021 10:15:21.818905000 UTC +00:00>,
 #<User:0x000000014269bb10 id: 7, name: "加藤", age: 38, gender: "men", created_at: Fri, 19 Nov 2021 10:15:21.820805000 UTC +00:00, updated_at: Fri, 19 Nov 2021 10:15:21.820805000 UTC +00:00>,
 #<User:0x000000014269b9f8 id: 8, name: "加藤", age: 21, gender: "women", created_at: Fri, 19 Nov 2021 10:15:21.823235000 UTC +00:00, updated_at: Fri, 19 Nov 2021 10:15:21.823235000 UTC +00:00>,
 #<User:0x000000014269b8e0 id: 9, name: "宮田", age: 23, gender: "men", created_at: Fri, 19 Nov 2021 10:15:21.824770000 UTC +00:00, updated_at: Fri, 19 Nov 2021 10:15:21.824770000 UTC +00:00>,
 #<User:0x000000014269b778 id: 10, name: "荻野", age: 38, gender: "women", created_at: Fri, 19 Nov 2021 10:15:21.826754000 UTC +00:00, updated_at: Fri, 19 Nov 2021 10:15:21.826754000 UTC +00:00>,
 #<User:0x000000014269b5c0 id: 11, name: "藤原", age: 21, gender: "men", created_at: Fri, 19 Nov 2021 10:15:21.828604000 UTC +00:00, updated_at: Fri, 19 Nov 2021 10:15:21.828604000 UTC +00:00>,
 #<User:0x000000014269b3e0 id: 12, name: "中村", age: 28, gender: "women", created_at: Fri, 19 Nov 2021 10:15:21.831359000 UTC +00:00, updated_at: Fri, 19 Nov 2021 10:15:21.831359000 UTC +00:00>]

*先頭は0なので、6レコード目は引数に5を指定してあげましょう。

・Userテーブルの4レコード目から、5つレコードを取り出す場合。

[2] pry(main)> User.limit(5).offset(3)
  User Load (1.0ms)  SELECT `users`.* FROM `users` LIMIT 5 OFFSET 3
=> [#<User:0x000000011335a1d8 id: 4, name: "佐藤", age: 24, gender: "women", created_at: Fri, 19 Nov 2021 10:15:21.814096000 UTC +00:00, updated_at: Fri, 19 Nov 2021 10:15:21.814096000 UTC +00:00>,
 #<User:0x000000011335a110 id: 5, name: "山田", age: 22, gender: "men", created_at: Fri, 19 Nov 2021 10:15:21.815985000 UTC +00:00, updated_at: Fri, 19 Nov 2021 10:15:21.815985000 UTC +00:00>,
 #<User:0x0000000113359fd0 id: 6, name: "山田", age: 24, gender: "women", created_at: Fri, 19 Nov 2021 10:15:21.818905000 UTC +00:00, updated_at: Fri, 19 Nov 2021 10:15:21.818905000 UTC +00:00>,
 #<User:0x0000000113359f08 id: 7, name: "加藤", age: 38, gender: "men", created_at: Fri, 19 Nov 2021 10:15:21.820805000 UTC +00:00, updated_at: Fri, 19 Nov 2021 10:15:21.820805000 UTC +00:00>,
 #<User:0x0000000113359df0 id: 8, name: "加藤", age: 21, gender: "women", created_at: Fri, 19 Nov 2021 10:15:21.823235000 UTC +00:00, updated_at: Fri, 19 Nov 2021 10:15:21.823235000 UTC +00:00>]

*4レコード目はoffsetの引数に3を指定しましょう。

タイトルとURLをコピーしました