🙆♀️
Rails アプリで、ページネーションに pagy を使う。
初めに
現場で使える Ruby on Rails 5速習実践ガイド では、ページネーション機能の実現のために、kaminari を紹介しています。
ここでは、kaminariより、40倍速いと評判の pagy を使って見たいと思います。
ページネーションとは
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
あとがき
ざっくりと書きましたが、どなたかのお役に立てば幸いです。
Discussion