Sinatra + Mongoid + Kaminari で paginate したい
前回の日記から時間が空いてしまったけど、 Sinatra アプリにて paginate を使おうとしている。 Rails3のプラグインだと、will_paginateやkaminariが有名みたい。 ただ、調べた範囲ではwill_paginateはMongoidに非対応で、kaminariはSinatraに非対応っぽい。 うーん、Sinatra + Mongoid の環境はマイナーなのか。
最終的にまだ動いていないけどSinatra + Mongoid + Kaminariの組み合わせに挑戦した記録。
モデル (Mongoid::Document, Mongoid::Criteria) へのkaminariの組み込み
Rails3用のコードでは、lib/kaminari/railtie.rbにてRailtieを使って実現している。 Sinatraの場合は手動で読み込まないといけないので、自分のアプリの始めに以下のように記述している。
10 require 'kaminari' 11 require 'kaminari/models/mongoid_extension.rb' 12 ::Mongoid::Document.send :include, Kaminari::MongoidExtension::Document 13 ::Mongoid::Criteria.send :include, Kaminari::MongoidExtension::Criteria
コントローラーへの組み込み
こっちはちょっと苦戦。 kaminariはRails3用のプラグインなので、url_forやrenderなどのActionViewのメソッドを多用している。 当然Sinatraにはこれらのメソッドが無いので、独自にhelperとして用意してあげないといけない。 うーん。思ったよりも大変。