2012年4月8日日曜日

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

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

コメントを投稿

Related Posts Plugin for WordPress, Blogger...