ページネーションを行うGem「Pagy」を使ってみる

こんにちは!kossyです!



今回はkaminariやwill_paginateよりもパフォーマンスがいいとされているGem「Pagy」を使ってみたので、
ブログに残してみたいと思います。





GitHub - ddnexus/pagy: The ultimate pagination ruby gem




導入

導入は至って簡単です。

# Gemfile

gem 'pagy'



# Your Terminal

$ bundle install

pagyをinstallし、任意のcontroller内でPagy::Backendをincludeすることで、pagyメソッドが使えるようになります。

class PostsController < ApplicationController
  include Pagy::Backend

  def index
    @posts = Post.all

    @pagy, @posts = pagy(@posts)
  end
end

あとはこのインスタンス変数をviewで呼び出すだけです。

# views/posts/index.html.erb

<%== pagy_nav(@pagy) %>

設定ファイル

github.com

上記ページにconfigファイルがありますので、設定を加えたい場合は
config/pagy.rbを作成して各種設定を加えていけばOKです。

いくつかの項目について調べてみました。

Instance Variable

# Instance variables
# See https://ddnexus.github.io/pagy/api/pagy#instance-variables
# Pagy::VARS[:page]   = 1                                  # default
# Pagy::VARS[:items]  = 20                                 # default
# Pagy::VARS[:outset] = 0                                  # default

APIリファレンスを一部訳してみます。

A few variables are particularly important for the calculation of the pagination, and therefore are validated and used to initialize a few instance variables.

The only mandatory instance variable to be passed is the :count of the collection to paginate: all the other variables are optional and have sensible defaults. Of course you will also have to pass the page or you will always get the default page number 1. They are all integers:

いくつかの変数は、ページネーションの計算にとって特に重要であるため、
検証され、いくつかのインスタンス変数を初期化するために使用されます。

渡される必須のインスタンス変数は、ページ付けするコレクションのcountだけです。
他のすべての変数はオプションであり、適切なデフォルトがあります。
もちろん、ページを渡す必要もあります。そうしない場合、常にデフォルトのページ番号1が取得されます。
これらはすべて整数です。

出典: Pagy | The Ultimate Pagination Ruby Gem

・Pagy::VARS[:page]はデフォルトのページ番号
・Pagy::VARS[:items] は1ページに表示する件数
・Pagy::VARS[:outset]は初期オフセット

ですね。いじるとしたらitemsくらいなような気もします。

Other Variable

# Other Variables
# See https://ddnexus.github.io/pagy/api/pagy#other-variables
# Pagy::VARS[:size]       = [1,4,4,1]                       # default
# Pagy::VARS[:page_param] = :page                           # default
# Pagy::VARS[:params]     = {}                              # default
# Pagy::VARS[:fragment]   = '#fragment'                     # example
# Pagy::VARS[:link_extra] = 'data-remote="true"'            # example
# Pagy::VARS[:i18n_key]   = 'pagy.item_name'                # default
# Pagy::VARS[:cycle]      = true                            # example

・Pagy::VARS[:size]は表示するページリンクのサイズで、左から、「最初のページ、現在のページの前、現在のページの後、最後のページ」
・Pagy::VARS[:page_param]はURLで使用されるページパラメータ名
・Pagy::VARS[:params]はURLに追加する任意のパラメータ
・Pagy::VARS[:fragment]はURLに追加する任意のフラグメント文字列
・Pagy::VARS[:link_extra]はページリンクに追加された追加の属性文字列
・Pagy::VARS[:i18n_key]はヘルパーのために用いるi18nキー
・Pagy::VARS[:cycle]無限ループにするかどうか

他のオプションについてもAPIドキュメントに記載がありましたので、
一読されることをお勧めします。

Basic Concepts | Pagy