RubyのGemである「kaminari」について

ページネーションを実装する際には「kaminari」というGemをインストールして使用します。またGemをインストールした後はrails sをし直し、サーバーを立ち上げ直す必要があります。インストールしたGemが反映されるタイミングがサーバーを立てるときだからです。

kaminari

kaminariはRubyのGemの一種。 このGemのインストールにより、簡単にページネーションを実装することができる。

kaminariインストール手順

①Gemfileに下記の記述を追記

Gemfile

~
gem 'kaminari'  # 最終行に追記してください

②bundle installを実行 ターミナル

  $ pwd
  #現在のディレクトリを確認
  $ bundle install
  #bundle install の実行

(③ローカルサーバーを再起動) ターミナル

  $ rails s

④コントローラファイルの編集 例えば、1ページに表示される情報を5件にする場合、コントローラからビューに送るツイート情報も5件のみになる。その数を制御するために、kaminariをインストールすると使える2つのメソッドを利用する。

kaminari:pageメソッド

kaminariを導入すると、モデルクラスにpageメソッドが定義される。これにより、ページネーションにおけるページ数を指定することができる。 ビューのリクエストの際paramsの中にpageというキーが追加され、その値がビューで指定したページ番号となる。そのため、pageの引数はparams[:page]となる。

kaminari:perメソッド

perメソッドもpageメソッドと同様、kaminariというgemをインストールすることで利用できるメソッド。1ページあたりに表示する件数を指定する。 perメソッドに引数として渡した数字が、ページネーションが実装されたビューで1ページあたりに表示する件数になる。

上記2つのメソッドは、以下のように使われる。

app/controllers/products_controller.rb

  変数名 = クラスを利用して取得したレコードのインスタンス.page(params[:page]).per(ここに1ページで表示したい件数を入力)

例えば、コントローラでproductsテーブルのレコードを定義し、indexアクションのビューに渡してページネーションを実装したい場合は下記のように表記する。

def index
  @products = Product.order("created_at DESC").page(params[:page]).per(5)
end

⑤ビューファイルの編集 ページネーションを実装する際にはコントローラだけでなくビューにも編集を加える必要がある。

kaminari:paginateメソッド

ページネーションのリンクを表示したいときに使用するメソッド。paginateメソッドの引数は、コントローラで定義した変数を指定する。

編集例は下記のように、<%= paginate(@products) %>を追記する。 app/views/products/index.html.erb

  <div class="contents row" >
    <% @products.each do |product| %>
      <div class="content_post" style="background-image: url(<%= product.image %>);">
        <%= simple_format(product.text) %>
        <span class="name"><%= product.name %></span>
      </div>
    <% end %>
  <%= paginate(@products) %>
</div>

※このとき、データベースのproductsテーブルにレコードが6個以上ないとページネーションは表示されないので注意。