find_by_sqlを使うような複雑なsqlを利用しながら、rails3でページング処理をおこなったので以下にメモ。
環境はruby1.9.2,rails3.0.10
find_by_sqlを利用した複雑なSQLは、Kaminariのページング処理では対応できなかったので、will_paginateを使いました。あと注意して欲しいのは、kaminariとは共存できないことです。まあ、する必要ないんですどw
まずはプロジェクトで利用しているrvmにします。
rvm use 1.9.2@rails3010
内容をチェックします。
gem list
内容をチェックします。will_paginateがないことを確認してgemのinstall
gem install will_paginate --pre
インストール終了後に確認します。
gem list will_paginate (3.0.pre4)
OK。さて、ではアプリケーションで利用できるようにします。アプリケーションフォルダに移動して、Gemfileを開きます。
vi Gemfile gem 'will_paginate','3.0.pre4'
保存して、準備OKです。
さて、あとはfin_by_sqlを利用している箇所を以下のように書き換えます。
find_by_sql(sql) ↓ paginate_by_sql(sql, :page => pages, :per_page => 10)
このように記述すると、以下のようなsqlが走ります。
[sql] LIMIT 10 OFFSET 0
自動的にlimit offsetが追加されているのがわかります。つづいてviewに記述します。
<%= will_paginate @tests %>
ページングが必要なデータ量の場合、これでリンクが表示されます。便利ですね。
デザインを変えたい場合は、こちらから好みのcssをダウンロードしてdivでクラスを指定して使えばOKです。
kaminariを使うか、will_paginateを使うかは、仕様次第な気がします。しかし、個人的にはwill_paginateのほうが良いと感じました。実際、僕はwill_paginateを利用しています。
railsの進歩に応じて、色々なパターンを試してみるのが、結局は一番なのでしょう。
railsなだけに、アジャイルに適応しようってことですね。それでわ。
0 件のコメント:
コメントを投稿