Railsでwill_pagineteを使って、ページネーションを実装する

will_paginate導入

まずはGemfileにwill_paginateを追加します。

gem 'will_paginate'
gem 'bootstrap-will_paginate'

will_paginateだけでもページネーションは実装できますが、見た目が良くなるのでbootstrap-will_paginateも追加するします。

インストールします。

bundle install

Controller設定

次に、Controllerを以下のようにします。

book_controller.rb

def book_list
   @books = Book.paginate(page: params[:page], per_page: 5)
end

will_paginateが導入されていると、各Modelにpaginateメソッドが追加されています。
表示するデータがBookの全データだった場合は、.allが.paginateに置き換わります。


page:は参照しているページ番号のことで、これは自動的に設定される値なのでそのままで大丈夫です。
per_page:は1ページに表示する件数のことで、今回は5件ごとに表示する設定にしています。

View設定

最後にViewに以下の2行を追加します。

book_list.html.erb

<tbody class="text-center">
 <%= will_paginate @books, :previous_label => ' &lt 前へ', :next_label => '次へ &gt' %> # この行と
  <% @books.each do |book| %>
   <tr>
    <td><%= book.id %></td>
    <td><%= book.title %></td>
     [...省略...]
   </tr>
  <% end %>
</tbody>
<%= will_paginate @books, :previous_label => ' &lt 前へ', :next_label => '次へ &gt' %> # この行を追記

Viewで追加する行は

<%= will_paginate @books %>

だけで十分ですが、defaultだと「前へ」「後ろへ」の表記が英語になってしまうため、上のコードでは少しいじっています。