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個以上ないとページネーションは表示されないので注意。