コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Rubyのgem, kaminari での pagenationの値の始まりは1から

普通に勘違いしていたのでメモ

要約

kaminariはページネーション用のgemでページ指定ができるが、ページは0始まりではなく、1始まり。0を指定すると1と同等の動きをする。

環境

rails (5.2.0)
kaminari (1.1.1)

実演

kaminari は Model.page({{ページ数}}).per({{1ページ当たりの件数}}) みたいな使い方します。

> User.count
   (0.4ms)  SELECT COUNT(*) FROM `users`
=> 3

こういうテーブルの状況だとした場合

> User.page(0).per(2).pluck(:id)
   (0.3ms)  SELECT  `users`.`id` FROM `users` LIMIT 2 OFFSET 0
=> [1, 2]

こうなる、pageを1にしたら idが3 だけ帰ってくるのかと思いきや…

> User.page(1).per(2).pluck(:id)
   (0.3ms)  SELECT  `users`.`id` FROM `users` LIMIT 2 OFFSET 0
=> [1, 2]

また、1と2。なのでpageで2を選ぶと…

User.page(2).per(2).pluck(:id)
   (0.3ms)  SELECT  `users`.`id` FROM `users` LIMIT 2 OFFSET 2
=> [3]

3が返却される。うっかりミスをしそうなので備忘録。