[Rails][will_paginate]検索数の表示
2009/05/25
お仕事でRuby on Railsを使って不動産会社のホームページを作ってます。
物件検索機能がほしいということなので、will_paginateって言うページネーションを使って、検索された物件情報をページごとに表示させることにしました。
使い方はすごく簡単。
普通のRailsでの検索方法「Item.find~」と同じように「Item.paginate~」ってやればいい。
表示ページを指定する:pageや1ページに表示する件数を指定する:per_pageの指定をしないといけないけど、後はfindと同じように利用できる。
ここで、ちょっとはまったのが、検索対象の件数をとってくる方法。
例えば、ある条件で検索絞込みをしたら、50件が検索ヒットしたとすると、1ページに10件表示の設定の場合、5ページまでのページリンクは作られるけど、どこにこの「50件」っていう数字が入っているのだろうか?
Item.paginate~で取得する配列には、1ページの表示数分のレコードしか入っていないから、@items.size => 10ってなって、50って数字はどこにあるのか分からない。
google君で探したけど、こういうのってどういうキーワードならヒットするのか、調べるのにも一苦労しそうな雰囲気。
しょうがいないってことで、RDocの中身をのぞいたけど、それらしいのが分からない。
適当に、@items.countとかって指定したら、やっぱりエラー・・・
そのエラー文で、「ActionView::TemplateError (undefined method `count' for #<WillPaginate::Collection:0xb6ccac84>) on line #43 of ~」なんて記載を発見。
そっか、WillPaginate::Collectionクラスに情報がありそうだと目をつけ、RDocで関連クラスを調査。
「total_entries」ってなんだか怪しそうなメソッドを発見。
でも、RDocでは説明文なし・・・
使ってみるかと、「検索数:<%= @items.total_entries %>」としてみたら、見事にビンゴ!
いや~、えがったえがった。
物件検索機能がほしいということなので、will_paginateって言うページネーションを使って、検索された物件情報をページごとに表示させることにしました。
使い方はすごく簡単。
普通のRailsでの検索方法「Item.find~」と同じように「Item.paginate~」ってやればいい。
表示ページを指定する:pageや1ページに表示する件数を指定する:per_pageの指定をしないといけないけど、後はfindと同じように利用できる。
ここで、ちょっとはまったのが、検索対象の件数をとってくる方法。
例えば、ある条件で検索絞込みをしたら、50件が検索ヒットしたとすると、1ページに10件表示の設定の場合、5ページまでのページリンクは作られるけど、どこにこの「50件」っていう数字が入っているのだろうか?
Item.paginate~で取得する配列には、1ページの表示数分のレコードしか入っていないから、@items.size => 10ってなって、50って数字はどこにあるのか分からない。
google君で探したけど、こういうのってどういうキーワードならヒットするのか、調べるのにも一苦労しそうな雰囲気。
しょうがいないってことで、RDocの中身をのぞいたけど、それらしいのが分からない。
適当に、@items.countとかって指定したら、やっぱりエラー・・・
そのエラー文で、「ActionView::TemplateError (undefined method `count' for #<WillPaginate::Collection:0xb6ccac84>) on line #43 of ~」なんて記載を発見。
そっか、WillPaginate::Collectionクラスに情報がありそうだと目をつけ、RDocで関連クラスを調査。
「total_entries」ってなんだか怪しそうなメソッドを発見。
でも、RDocでは説明文なし・・・
使ってみるかと、「検索数:<%= @items.total_entries %>」としてみたら、見事にビンゴ!
いや~、えがったえがった。