昨日↓の続き。今日も少し。
トータル件数の上限を指定する
ページごとの件数上限指定は、昨日も書いた通り:per_pageを設定することで可能。
ただ、ページネーションしたいモデルの全件数が多い場合に、per_page: 20とかで表示するとページが何千ページとかに及んで邪魔だったので、最大ページ数を指定できないものかと思って調べた。
最初、モデルに対してlimit(100)として、その結果に対してpaginateすればいいかと思ったけどダメだった。全件表示される。
で、調べたら公式のAPI documentation(wiki)では見つからなかったけど、Stack Overflowで以下の回答が見つかった。
ruby on rails - Limit number of pages in will_paginate - Stack Overflow
回答によると、:total_entriesを指定する。
@posts = Post.order(created_at: :desc) .paginate(page: params[:page], per_page: 20, total_entries: 20 * 100)
:total_entriesで指定するのは最大ページ数じゃなくてトータル件数なので、「:per_pageで指定した件数 * ページ数」を指定する。(この例だと100ページ)
ただし、これで一応動いたものの、公式のドキュメントに記載が見つからないしStack Overflowの回答も結構古いものなので、使っていいものなのかいまいち自信がない。これが仮に非推奨だとしたら、これに相当する代替手段はあるはずだと思うんだけど。
表示のカスタマイズ
こっちはちゃんと公式ドキュメントに載ってたので安心。
<%= will_paginate @posts, renderer: BootstrapPagination::Rails, previous_label: '← 前', next_label: '次 →', inner_window: 1, outer_window: 0 %>
- :previous_label - 前ページに戻るリンクのラベル
- :next_label - 次ページへ進むリンクのラベル
- :inner_window - 現在ページの周りに表示するリンク数 (default: 4)
- :outer_window - 最初と最後のページの周りに表示するリンク数 (default: 1)
他にもあるので詳しくは公式ドキュメント参照。
まとめ
とても便利だけど、:total_entriesが気がかり。