Railsで、独自ペジネーションを実装しました。
今まで -> kaminariというライブラリ
今日やったの -> ActiveRecordのlimitとoffset
ライブラリに頼っていたのを、自分なりにRails書きました。
kaminari実装記録↓
参考にしたもの
「Ruby on Rails4 アプリケーションプログラミング」という書籍を参考にしました。
ActiveRecordの limit と offset を使えばペジネーションを実装できるよ!とのことで、試してみました。
limit : データ取得件数の制限
limit - リファレンス - - Railsドキュメント
offset : データ取得開始位置の指定
offset - リファレンス - - Railsドキュメント
要は、x 番目から y 個取得してねー。という感じ。
今回の場合、xがページで、y 個が表示件数です。
やったこと
まずはともあれコントローラ。
なにやら色々書いてます。
上の方にあるのが、表示件数(page_size)とページ(page_num)ですね。
ページはリクエストパラメータで受け取ります。
そのあとの4行は表示用のインスタンス変数です。これらをリストに表示して、ユーザーが選択する感じです。
そして末尾でデータを取得しています。
ビュー
ビュー書きました。
ブラウザでの表示を見たほうが早いですね。
こんな感じです。
それぞれのリンクには、コントローラで定義したインスタンス変数が格納されています。
なので、それをコントローラにパスする感じ。(もっと良い実装方法があるはず…)
ヘルパー化したよ
せっかくなのでヘルパービューとして、部品化しちゃいました。
ヘルパーを使ったのなんて、Railsチュートリアル以来です。
初めて自発的に使いました。すごくカンタンで驚いています。
部品を呼び出すのはこの1行。たった1行。便利。
あとで使い回すと思うので、いまのうちに部品化してみました。
振り返り
修正前
修正後
まとめ
という感じで、あっさりとペジネーションを実装することができました。
ライブラリも便利ですが、個人的には自作できるところは自作していきたい派です。
それにしても、ペジネーションのデザイニングがとても悩ましい…。