プログラミングと旅と映画の日々

普段はスマホ決済サービスの会社でバッグエンドを担当しているエンジニアです。プログラミングと趣味の映画、株、時々うどんに関してブログを書いていこうと思います。海外ドラマ、クロスバイクも好きです。

【Ruby on Rails5】railsでページネーションを導入する

f:id:takanori5:20180113103312p:plain


以下のように1ページに100ユーザーも表示されているのを
1ページ30ユーザーの表示にするため、
ページネーションを導入します。


f:id:takanori5:20180121161301p:plain

Railsには豊富なページネーションメソッドが用意されています。
今回はその中で最もシンプルかつ堅牢なwill_paginateメソッドを使って
ページネーションを実現します!!

will_paginateを利用するには、
Gemfileにwill_paginate gem とbootstrap-will_paginate gemを両方含め、Bootstrapのページネーションスタイルを使ってwill_paginateを構成する必要があります。

では、gemfileに以下のように追加します。

gem 'will_paginate',           '3.1.6'
gem 'bootstrap-will_paginate', '1.0.0'

gemをインストール!!

$ bundle install

gemのインストールが完了しました。

まずはuser一覧のindex.html.erbに対して
ページネーションしたい箇所を指示する必要があります。

以下で該当箇所を囲えばOK

<%= will_paginate %>

こんな感じ

<h1>All users</h1>

<%= will_paginate %>

<ul class="users">
  <% @users.each do |user| %>
    <li>
      <%= gravatar_for user, size: 50 %>
      <%= link_to user.name, user %>
    </li>
  <% end %>
</ul>

<%= will_paginate %>


あとはcontrollerのindexメソッドで

  def index
    @users = User.all
  end

こうやって取得していた箇所を

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

こうやってpagginateを利用するように修正します。

これで以下のようにページネーションが適用されます!
超簡単ですね!
ちなみにデフォルトは30件となっています。
f:id:takanori5:20180121164408p:plain