Ruby On Railsでページネーションする場合、最も多く用いられるGemの一つとして、kaminariが挙げられます。

今回は、kaminariの導入から、表示部分のカスタマイズ方法を説明します。

kaminariのインストール

Gemファイルに以下を記述します

$ vi Gemfile
gem 'kaminari'

bundleを実行してインストールします

$ bundle

インストールを確認します

$ gem list | grep kaminari
kaminari (0.17.0)

基本的な使い方

kaminariでページネートするには、以下のように記述します。

User.page

pageメソッドは、ActiveRecord::Relationオブジェクトを受け取ってActiveRecord::Relationオブジェクトを返します。
そのため、以下のような使い方もできます。

User.where(:id => 10).page

ページあたりの表示件数を変える

コントローラーごとに変更する場合は、以下のように記述します。

def index
  @users = User.page(params[:page]).per(10)
end

デフォルトの表示件数を変えたい場合は、モデルの定義に以下を追加します。

paginates_per 10

配列をページネートする

pageメソッドは配列も扱うことができます。

Kaminari.paginate_array(user_array).page

ビューをカスタマイズ

ビューをカスタマイズする方法には、デフォルトを変更する方法と、カスタムテーマを作成する2通りの方法があります。

デフォルトビューのカスタマイズ

以下のコマンドでkaminariのビューファイルを生成します。

$ rails g kaminari:views default

app/views/kaminariフォルダが作成され、フォルダ内にテンプレートが作成されます。
このファイルを編集すれば、デフォルトのページネートのビューを変更することができます。

作成されるファイルの構成は以下の通りです。

kaminari
|- _first_page.html.erb # 最初のページボタン
|- _gap.html.erb        # ページが省略される"..."の部分
|- _last_page.html.erb  # 最後のページボタン
|- _next_page.html.erb  # 次のページボタン
|- _page.html.erb       # ページ番号
|- _paginator.html.erb  # 全体の構成定義
|- _prev_page.html.erb  # 前のページボタン

カスタムテーマを設定

カスタムテーマとしてオリジナルのテンプレートを作成します。

$ rails g kaminari:views default #すでに作成されている場合はスキップされます
$ cd app/views/kaminari
$ mkdir custom_theme
$ cp _*.html.* custom_theme

ページネートを設定するビューファイルに、カスタムテーマを格納したフォルダ名を設定します。

<%= paginate @users, theme: 'custom_theme' %>

参考

https://github.com/kaminari/kaminari