at posts/single.html

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として用意してあげないといけない。 うーん。思ったよりも大変。

関連する日記