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 => ' < 前へ', :next_label => '次へ >' %> # この行と
<% @books.each do |book| %>
<tr>
<td><%= book.id %></td>
<td><%= book.title %></td>
[...省略...]
</tr>
<% end %>
</tbody>
<%= will_paginate @books, :previous_label => ' < 前へ', :next_label => '次へ >' %> # この行を追記
Viewで追加する行は
<%= will_paginate @books %>
だけで十分ですが、defaultだと「前へ」「後ろへ」の表記が英語になってしまうため、上のコードでは少しいじっています。