はじめに
最近、ページネーション機能を実装したので、本記事に簡単にまとめます。
ページネーション機能
ページネーションとは、内容の多いページを複数のWebページに分割し、各ページへのリンクを並べてアクセスしやすくするために設置するものです。よく比較されるものとして、無限スクロールがありますが、どちらを実装するかは各々のメリットデメリットをよく理解してから実装するのが良いかと思われます。場合によっては、実装することがマイナスとなりうるためです。(例えば、チャット画面でページネーション 機能があると切り替えが面倒ですよね)
実装
実装方法は簡単で、kaminariというgemを使用します。
gem `kaminari`
※bundle install忘れないように!!!
次にコントローラを実装します。
class HomeController < ApplicationController
def index
@posts = Post.all
@posts = Post.page(params[:page]).per(20)
end
end
per()については、何投稿ごとにページを切り替えるか指定しています。
あとは、ビューに以下を設置します。
<%= paginate @posts %>
極論、これで完成です。めちゃくちゃ簡単ですね。
とはいえ、細かい設定したいですよね。
そうした場合は以下のコマンドを叩いてください。
rails g kaminari:config
そうすると、以下のような設定ファイルが生成されます。
コメントアウトを外して、変えたい部分を変えてください
Kaminari.configure do |config|
# config.default_per_page = 25 # 1ページ辺りの項目数
# config.max_per_page = nil # 1ページ辺りの最大数
# config.window = 4 # ex 値が2の場合 .. 2 3 (4) 5 6 ..
# config.outer_window = 0 # ex 値が2の場合 .. (4) .. 99 100
# config.left = 0 # ...になったときの左側の表示数
# config.right = 0 # ...になったときの右側の表示数
# config.page_method_name = :page # メソッド名
# config.param_name = :page # ページネーションのパラメーターの名前
end
あと、個人的に次へボタンを消したいなと思ったのですが、これはビューファイルごと消してやるといいかと思います。
その場合は、以下のコマンドを叩いてビューファイルを生成します。
rails g kaminari:views default
なお、bootstrapをkaminariに適用する場合は以下のようにします
rails g kaminari:views bootstrap3
あとは、個人でCSSを当ててもらえれば、それらしきものができるかと思います。
おわりに
ざっくりとkaminariのまとめをしました。個人的には簡単で嬉しいものの、やっぱり作った感がなくて、、、、なので一から自分で作ってみようかな〜なんて考えています。
みなさんも是非試してみてはいかがでしょうか