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

食品の営業からSEに転職した文系エンジニアです。 プログラミングと趣味の株に関してブログを書いていこうと思います。

【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