現状、あるモデルからのデータは1ページ、1paginationで使用していた
なんと、800件をも超えるデータをページングしていたのだ(ページ数は600件を超えていた)
この仕様に不満を持った何者かのダークパワーで1ページに複数のロジック(例えば、一つ目は日付順、二つ目は更新日順)などを分けるようにと仕事が回ってきてしまった
僕はタブで分けて、そして流石のkaminari、その機能は標準でついていた
当初のコントローラーはこのようになっていた1
2def set_hoge
@hoge = Hoge.where(fuga: 1).page(params[:page])
次に僕が書いたのはこんな感じ1
2
3
4
5def set_hoge
# 日付順
@hoge1 = Hoge.where(fuga: 1).page(params[:page])
#更新日順
@hoge2 = Hoge.where(fuga: 2).page(params[:page])
ただ、このままだとクエリが共有されるので、上手くいかない
最終的に次のようになった1
2
3
4def set_hoge
# 日付順
@hoge1 = Hoge.where(fuga: 1).page(params[:page_1])
@hoge2 = Hoge.where(fuga: 2).page(params[:page_2])
index.html.haml1
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ってほとんど何も考えなくてページングできるから便利ね