ruby on railsでページングをする場合にはpaginateというのを使うらしい。
2.0だとwill_paginateというのになるらしい。
なんか、will_paginateは非効率なSQLを吐くとからしいけど、本家推奨?っぽいのでそのうち改善されるだろうということで、あまりその辺は気にしないことに。
ところで、自分のrailsのバージョンを確かめるには、
ruby script/about
で調べられる。
筆者の場合はこんな感じ。
========================-
About your application's environment
Ruby version 1.8.6 (i386-mswin32)
RubyGems version 0.9.4
Rails version 2.0.2
Active Record version 2.0.2
Action Pack version 2.0.2
Active Resource version 2.0.2
Action Mailer version 2.0.2
Active Support version 2.0.2
Application root C:/Dev/ruby/workspace/
Environment development
Database adapter postgresql
========================-
ちなみに"ruby script/xxxx"ってどこでもできるわけじゃなく、アプリケーションルートじゃないとダメってことに気づくのにけっこう時間がかかった。
話を元にもどしてwill_paginateだけど、プラグインとして別切りにされているのでインストールしなきゃいけない。
ruby script/plugin install \
http://tools.assembla.com/svn/ \
breakout/breakout/vendor/plugins/will_paginate/
↑全部一行で、¥は取って。
で、
コントローラーに
=====================
# @hoges = Hoge.find_by_sql("select * from hoges LIMIT 30")
@hoges = Hoge.paginate(:page => params[:page], :per_page => 30)
=====================
ビューのテキトーなとこに
=====================
<%#= link_to 'Previous page', { :page => @hoge_pages.current.previous }, {:rel=>'prev'} if @hoge_pages.current.previous %>
<%#= link_to 'Next page', { :page => @hoge_pages.current.next }, {:rel=>'next'} if @hoge_pages.current.next %>
<%= will_paginate @hoges, :prev_label=>'«Prev', :next_label=>'Next»' %>
=====================
であっさりページングが完了。
実は、けっこうハマッたことがあって(またかよ)、will_paginateをインストールしても、うんともすんとも反応しなかった。
原因がコントローラのところで
Hoge.pagenate
って書いてたからだった。
いや、よくよく思い出してみるとエラーも「pagenateなんかねーよ」ってでてたんだけど、pagenateでググるとけっこうでてくんのよ。
Javaとかだとメソッドの参照がガッチリきくからこんなことないので(別にJavaの功績じゃないけど)ちょっとあせった。
コメントする