🙆‍♀️

Rails アプリで、ページネーションに pagy を使う。

2021/06/19に公開

初めに

現場で使える Ruby on Rails 5速習実践ガイド では、ページネーション機能の実現のために、kaminari を紹介しています。
ここでは、kaminariより、40倍速いと評判の pagy を使って見たいと思います。

現場で使える Ruby on Rails 5速習実践ガイド

ページネーションとは

100件のtask(タスク、作業)があるときに、全てのデータを表示すると、ブラウザの表示も遅くなりますし、スクロールして見ていくのも大変です。
そのため、10件ずつ、あるいは20件ずつページ分けして表示するようにすると、快適に閲覧できるようになります。

準備

pagyのために、Gemfileを編輯します。

# Gemfile
gem 'pagy' # ページネーション
% bundle install

準備

pagy を使った、ページ分け機能が使えるよう、
ApplicationControllerと、ApplicationHelper に追記します。

# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  include Pagy::Backend
end
# app/helpers/application_helper.rb
module ApplicationHelper
  include Pagy::Frontend
end

ページ分けを綺麗に表示できるよう、以下も記します。

# config/initializers/pagy.rb
require 'pagy/extras/semantic'

# 既定値は20件ですが、10件ごとにページ分けしたいときには、以下のように書きます。
# Pagy::VARS[:items] = 10

他にもいろいろ設定できるよう提供されているので、以下から落としてきてもいいです。
https://raw.github.com/ddnexus/pagy/master/lib/config/pagy.rb

ページ番号に対応する範囲のデータを検索するようにする。

class TasksController < ApplicationController
  def index
    @pagy, @tasks = pagy(Task.all)
  end
end

ビューにページ分けしたデータを表示する

== pagy_semantic_nav(@pagy)

table
  thead
    tr
      th = Task.human_attribute_name(:name)
  tbody
    - @tasks.each do |task|
      tr
        td = task.name

あとがき

ざっくりと書きましたが、どなたかのお役に立てば幸いです。

参考

pagy
Quick Start

Discussion