railsでkaminariを使ってページネーションを作成

目次

マーケター、エンジニアを月1時間からジョインできるプラットフォーム

airteamは月1時間からマーケターやエンジニアに相談できるプラットフォーム。 雇うのはハードル高いけどプロをチームに入れたい。そんな経営者のためのサービスです。 相談にのる方も募集しています。

タスクなしだから月一時間からジョイン可能

作業はなくオンライン相談メイン。 月1時間からさっと経験者に継続的に相談できます。

多様な経験者を雇用するより何倍も早くチームに

あらゆるジャンルの経験者がいるので あなたのチームのノウハウの選択肢が広がります。

NDAはすでに締結済み、契約もスムーズ

契約の煩雑なやりとりはなく、NDAはすでに締結済み、書面のやりとりはありません。

railsのkaminariを使ってページネーションを作成していきます。viewを編集して見た目も変えられるようにします。

kaminariのインストール

gem 'kaminari'

kaminariをまずはインストール

bundle install

bundle installでインストールを実行

kaminariの基本設定

ページネーションしたい部品をpage(params[:page]).per(20)でpageあたりいくつ表示させるか設定する。

controller

class HomeController < ApplicationController
  def top
    @posts = Post.page(params[:page]).per(20)
  end
end

view

<% @posts.each do |post| %>
 <div class="panel panel-success">
   <div class="panel-body">
    <%= link_to(post.content,"/posts/#{post.id}") %>
   </div>
   <div class="panel-footer">content_description</div>
 </div>
<% end %>
<%= paginate @posts %>

paginateと繰り返す変数は同じものを設定する。@postをcontrollerの設定で繰り返し、その設定でpaginateも設定する。

pageメソッド

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

perメソッド

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

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

view編集

rails g kaminari:views default

これでviews/kaminari以下にファイルができる。ここでデザインの修正ができる。

設定を変える

rails g kaminari:config

上記コマンドでconfigファイル作成。

Kaminari.configure do |config|
  # config.default_per_page = 25 # 1ページ辺りの項目数
  # config.max_per_page = nil    # 1ページ辺りの最大数
  # config.window = 4            # ex 値が2の場合 .. 2 3 (4) 5 6 ..
  # config.outer_window = 0      # ex 値が2の場合 .. (4) .. 99 100
  # config.left = 0              # ...になったときの左側の表示数
  # config.right = 0             # ...になったときの右側の表示数
  # config.page_method_name = :page # メソッド名
  # config.param_name = :page    # ページネーションのパラメーターの名前
end

並び順を変える

class HomeController < ApplicationController
  def top
    @posts = Post.page(params[:page]).per(6).order('updated_at DESC')
  end
end

上記のようにpageメソッドを指定しているオブジェクトにorderメソッドをつける。