もふもふ技術部

Sinatraでkaminariを使ってページングを実装する


Railsでおなじみ、ページング処理を簡単に実装できるgemのkaminariをsinatraで使おうとしたらちょっとハマりました。

Ruby 1.9.3でやっていきます。
まずはこんな感じで書きました。

Gemfile

padrinoはSinatraを拡張した高速フレームワークなんですが、kaminariで使用するSinatraHelperがpadrino-helpersを参照しているため必要みたい。

Rails同様のコードを書いていきます。

Model
article.rb

view

main.rb

書き方としてこれで問題ないのですが、エラーになります。

同現象がStack Overflowに投稿されてました。
http://stackoverflow.com/questions/13700481/rails-3-yaml-errors

Ruby 1.9.3のyaml parserがPsychなのに対して、1.8.7以前がSyckを使っているみたいなんですが、どうもpadrinoが見に行っているlocale/cz.ymlがSynk用のyaml記法で書かれているため、正しくparseできないよ!って怒られてるらしい。

gem内のファイルに手を入れるのは管理が面倒なので、プロジェクト内に自前のlocale/ja.ymlファイルを準備してそっちを参照するようにして回避することにしました。

main.rb

SINATRA_ROOT/locales/ja.ymlを作成。
ひとまず下記だけで良い。

ja.yml

これでOK。ページングできるようになります。

ページリンクをカスタマイズする

デフォルトのページリンクがダサいので、カスタマイズしたくなると思います。通常はSINATRA_ROOT/views/kaminari/*.html.erbを参照してくれるのですが、どうやらkaminariのバージョンが0.15.0からこれに対応されたみたいですね。

インストールされているgemが0.14〜の場合は0.15.0をインストールする必要があります。

Gemfile

あとは下記のようなファイルを設置すれば独自のViewを使用できます。各々のhtml.erbについてはいくらでも情報があると思うので割愛します。

SINATRA_ROOT/views/kaminari

The following two tabs change content below.
原田 敦

原田 敦

日本CAWのエンジニア。もふもふ部の部長。得意分野はRuby on Railsを使った小規模WEBアプリケーションを高速で開発すること。週末の楽しみは一人お菓子パーティー。三度の飯より小動物をもふもふするのが好きです。