will_paginateの出力をカスタマイズする
昨日↓の続き。今日も少し。
トータル件数の上限を指定する
ページごとの件数上限指定は、昨日も書いた通り: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
が気がかり。