LoginSignup
0
1

More than 3 years have passed since last update.

[Rails]kaminariでページネーション機能を作る

Last updated at Posted at 2021-04-25

はじめに

最近、ページネーション機能を実装したので、本記事に簡単にまとめます。

ページネーション機能

ページネーションとは、内容の多いページを複数のWebページに分割し、各ページへのリンクを並べてアクセスしやすくするために設置するものです。よく比較されるものとして、無限スクロールがありますが、どちらを実装するかは各々のメリットデメリットをよく理解してから実装するのが良いかと思われます。場合によっては、実装することがマイナスとなりうるためです。(例えば、チャット画面でページネーション 機能があると切り替えが面倒ですよね)

実装

実装方法は簡単で、kaminariというgemを使用します。

gem `kaminari`

※bundle install忘れないように!!!

次にコントローラを実装します。

controller.rb
class HomeController < ApplicationController
  def  index
    @posts = Post.all
    @posts = Post.page(params[:page]).per(20)
  end
end

per()については、何投稿ごとにページを切り替えるか指定しています。

あとは、ビューに以下を設置します。
 

index.html.erb
<%= 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のまとめをしました。個人的には簡単で嬉しいものの、やっぱり作った感がなくて、、、、なので一から自分で作ってみようかな〜なんて考えています。
みなさんも是非試してみてはいかがでしょうか

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1