[Ruby on Rails 4] kaminari でページネーションを生成する

memo.

こちらを参考にさせて頂きました。

Installation

以下を追加して bundle install

Gemfile
gem 'kaminari'

config ファイルを生成する。

% bin/rails g kaminari:config
      create  config/initializers/kaminari_config.rb

config ファイルを読み込むためには Server を再起動する。

Usage

Controller

Controller の index アクションを変更する。

items_controller.rb
class ItemsController < ApplicationController
  # GET /items
  def index
    @items = Item.all.page(params[:page])
  end

View

index の View ファイル内で、ページネーションを表示したい箇所にタグを追加する。

index.html.haml
= paginate @items

以上で動作する。

View に Theme を適用する

さらに Bootstrap 用の View を生成する。
テーマファイルが用意されている。便利。

amatsuda/kaminari_themes

% bin/rails g kaminari:views bootstrap3
      downloading app/views/kaminari/_first_page.html.haml from kaminari_themes...
      create  app/views/kaminari/_first_page.html.haml
      downloading app/views/kaminari/_gap.html.haml from kaminari_themes...
      create  app/views/kaminari/_gap.html.haml
      downloading app/views/kaminari/_last_page.html.haml from kaminari_themes...
      create  app/views/kaminari/_last_page.html.haml
      downloading app/views/kaminari/_next_page.html.haml from kaminari_themes...
      create  app/views/kaminari/_next_page.html.haml
      downloading app/views/kaminari/_page.html.haml from kaminari_themes...
      create  app/views/kaminari/_page.html.haml
      downloading app/views/kaminari/_paginator.html.haml from kaminari_themes...
      create  app/views/kaminari/_paginator.html.haml
      downloading app/views/kaminari/_prev_page.html.haml from kaminari_themes...
      create  app/views/kaminari/_prev_page.html.haml

View の文言をカスタマイズする

i18n の日本語設定ファイルに追加する。

kaminari/kaminari: I18n and Labels

conifg/locales/ja.yml
ja:
  views:
    pagination:
      first: "&laquo; First"
      last: "Last &raquo;"
      previous: "&lsaquo; Prev"
      next: "Next &rsaquo;"
      truncate: "&hellip;"
  helpers:
    page_entries_info:
      one_page:
        display_entries:
          zero: "No %{entry_name} found"
          one: "Displaying <b>1</b> %{entry_name}"
          other: "Displaying <b>all %{count}</b> %{entry_name}"
      more_pages:
        display_entries: "Displaying %{entry_name} <b>%{first}&nbsp;-&nbsp;%{last}</b> of <b>%{total}</b> in total"

ルーティングの設定

こちらでルーティングの設定変更について触れられていた。

kaminariをBootstrap3、Rails4.2環境で使う![Ruby 2.3] – 酒と泪とRubyとRailsと

  • SEO的に良い、ユーザーフレンドリーである
  • params pageがURLセグメントの一部 => RailsのPageキャシュが有効に

デフォルトでは、下記の URI で遷移する。

http://localhost:3000/items?page=2

このルーティングを変更することで

ルーティングにアクションを追加 – Ruby on Rails入門

config/routes.rb
resources :items do
  get 'page/:page', :action => :index, :on => :collection
end

以下のように URI が整う。

http://localhost:3000/items/page/2

補遺