A Little Each Day

note to self

Railsでkaminariを使ってページネーションを実装する

こんにちは。本日はページネーションGemのkaminariを使ってページングを実装する方法です。

kaminariと似たようなGemに「will_paginate」というGemがあります。

どちらも人気のページャーGemですが、今回はkaminariの使い方を説明していきます。

railsアプリの作成

まずはじめに、サンプルとなるRailsアプリを作成しましょう。

$ rails new sample


今回はタイトルと内容を持つポストモデルを作成します。

$ cd sample
$ rails g scaffold Post title:string content:text


初期データを1000件投入します。

1000.times do |i|
  Post.create(
    title:    "タイトル#{i}",
    content:  "内容#{i}"
  )
end


データをマイグレーションしましょう。

$ rake db:migrate


初期データを投入します。

$ rake db:seed


これで以下のようにたくさんのデータが表示されていると思います。

f:id:chi_kun:20170706153637p:plain


これで下準備はOKです。


kaminariのインストールと使い方

まずはGemfileにkaminariを追加して、インストールしましょう。

gem 'kaminari'


インストール

$ bundle install


インストールができたので、Railsアプリを編集していきましょう。

まずはコントローラーをkaminariに対応させます。

# posts_controller

def index
  @posts = Post.page(params[:page])
end


次にページネーションを表示したいViewを編集します。

# index.html.erb

<%= paginate @posts %>


たったこれだけでページネーションを実装できてしまいます。

f:id:chi_kun:20170707155557p:plain


もし1ページあたりの件数を変えたい場合は、コントローラーで指定しても大丈夫です。

# posts_controller

def index
  @posts = Post.page(params[:page]).per(10)
end


この場合は1ページあたり10件表示します。

ちなみにデフォルトでは25件表示します。


kaminariの設定

kaminariはデフォルトでも十分使えますが、細かい設定を指定したい場合は以下のコマンドを打ってconfigファイルを生成します。

$ rails g kaminari:config


生成された設定ファイルの中身です。

# config/initializers/kaminari_config.rb

Kaminari.configure do |config|
  # config.default_per_page = 25
  # config.max_per_page = nil
  # config.window = 4
  # config.outer_window = 0
  # config.left = 0
  # config.right = 0
  # config.page_method_name = :page
  # config.param_name = :page
end


コメントアウトされているのがデフォルトの設定です。

もし設定を変えたい場合は、コメントアウトをしてカスタマイズしていきます。


国際化

kaminariを国際化するには、localesファルダにkaminariに対応した辞書ファイルを設置します。

# ja.yml

ja:
  views:
    pagination:
      first: "&laquo; 最初"
      last: "最後 &raquo;"
      previous: "&lsaquo; 前"
      next: "次 &rsaquo;"
      truncate: "&hellip;"


今回は日本語だけですが、他の言語もGitHub上などでインストールできるので、各自試してみてください。


見た目をかえる

ページネーション部分はデフォルトだと味気ないので、デザインをあてたいと思うことでしょう。

こちらもkaminariではデフォルトでコマンドが用意されています。

$ rails g kaminari:views default


するとviews/kaminari以下にファイルが作られるので、好きなようにデザインを調整できるようになります。


またデザインがめんどくさいと思う人は、Bootstrapを適用することもできます。

※Bootstrapのインストールは過去記事を参照してください。

blog.otsukasatoshi.com


こちらもkaminariでデフォルトでコマンドが用意されています。
(Bootstrapのバージョンを書かないとエラーが出ます!)

$ rails g kaminari:views bootstrap4


きちんとBootstrapが適用されていますね。

f:id:chi_kun:20170707163549p:plain



本日は以上です。