kaminariで1ページ内で複数のpaginationを使う方法

現状、あるモデルからのデータは1ページ、1paginationで使用していた
なんと、800件をも超えるデータをページングしていたのだ(ページ数は600件を超えていた)
この仕様に不満を持った何者かのダークパワーで1ページに複数のロジック(例えば、一つ目は日付順、二つ目は更新日順)などを分けるようにと仕事が回ってきてしまった

僕はタブで分けて、そして流石のkaminari、その機能は標準でついていた
当初のコントローラーはこのようになっていた

1
2
def set_hoge
@hoge = Hoge.where(fuga: 1).page(params[:page])

次に僕が書いたのはこんな感じ

1
2
3
4
5
def set_hoge
# 日付順
@hoge1 = Hoge.where(fuga: 1).page(params[:page])
#更新日順
@hoge2 = Hoge.where(fuga: 2).page(params[:page])

ただ、このままだとクエリが共有されるので、上手くいかない
最終的に次のようになった

1
2
3
4
def set_hoge
# 日付順
@hoge1 = Hoge.where(fuga: 1).page(params[:page_1])
@hoge2 = Hoge.where(fuga: 2).page(params[:page_2])

index.html.haml

1
2
.hoge= paginate @hoge1, :param_name => 'page_1'
.hoge= paginate @hoge2, :param_name => 'page_2'

このparam_nameを使ってやると、クエリは共有されなくなる
具体的には、kaminariはつぎのようなクエリを発行する

1
localhst:3000/hoge?page_1=2&page_2=3

しかし、kaminariってほとんど何も考えなくてページングできるから便利ね