2012年4月8日日曜日

Ruby on Rails3のページング処理でKaminariを使う

rails3でページング処理をおこなったので以下にメモ。
環境はruby1.9.2,rails3.0.10

rails3でページン処理を実装する場合、Kaminariというgemが標準らしいので使用してみました。

まずはプロジェクトで利用しているrvmにします。


rvm use 1.9.2@rails3010

内容をチェックします。


gem list

内容をチェックします。Kaminariがないことを確認してgemのinstall


gem install kaminari

インストール終了後に確認します。


gem list

kaminari (0.13.0)

OK。さて、ではアプリケーションで利用できるようにします。アプリケーションフォルダに移動して、Gemfileを開きます。


vi Gemfile

gem 'kaminari'

保存して、準備OKです。

続いて、Modelにページングの処理を記述します。


paginates_per 10

ページングの処理を使いたい適当なModelに上記のような設定を記述します。記述したらコントローラーから呼び出します。


@tests = Test.order("insert_date desc").page params[:page]

このように記述すると、以下のようなsqlが走ります。


SELECT "tests".* FROM "tests" ORDER BY insert_date desc LIMIT 10 OFFSET 0

自動的にlimit offsetが追加されているのがわかります。つづいてviewに記述します。


<%= paginate @tests %>

ページングが必要なデータ量の場合、これでリンクが表示されます。便利ですね。

しかし、このkaminariには致命的な欠点もあります。それは、find_by_sqlを使うような複雑なSQLには対応していないことです。
配列で取得してページングはできるのですが、limit offsetが利用できないので、一度に全ての データを取得しないといけないのです。これでは、現実的ではありません。
というわけで、find_by_sqlを使う場合は、他の方法でページングする必要があります。

とりあえず、今回はここまでです。でわ。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...