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 件のコメント:
コメントを投稿