will_paginate 覚書き
Rails は 2.0以降頁ネーションはそれ自体では提供しなくなった。その機能追加はいろいろあるようだが、ちょっと will_paginate を使ってみた。
参考
インストール注意
参考にした上記リンク先にも注されているし、 svn://errtheblog.com/svn/plugins/will_paginate/README にもあるが、現在この SVNサイトからのプラグイン提供は行われていない。
It's recommended that you install the gem instead of a Rails plugin: gem install will_paginate
gem からのインストールとなる。
でもって、config\environment.rb に
config.gem :will_paginate
ちょっと
使い方なんかは上記リンク先参考。そして気付いた点(will_paginateのオプション)、
- :inner_window 現在頁の両側このページ数リンクを表示。デフォルト 4 だと都合 9頁分の表示になる、結構長い。0 にすると現在頁表記だけ、負数にすると現在頁表記無くなる
- :outer_window 0 で最初と最後の頁表示のみ、負数でそれらは無くなり両端 Previous、Next だけに、そして間の省略の「...」も出なくなる。
- :inner_window、:outer_window 共に負数にすると Previous、Next だけの表記になる。
さらに、コントローラーでは params[:page] で頁番号を受けるわけだが、負数や零でエラーになるので、これ位しておいても良いかもしれない。
page = params[:page].to_i.abs page = 1 if page.zero? @<モデルコレクション変数名> = <モデル名>.paginate :page => page
改造の置き場所
そして、ナビゲーションのwill_paginate ヘルパーメソッドの表示をもうちょっとカスタマイズしたかった。will_paginateのオプションがあれば大概どうにかなりそうなもんだが、ページ番号の算用数字の表記を変えたかった。
will_paginate自体、個々の Railsプロジェクトのプラグインとしてはインストールできなくなってて、みんなの gem なので、それ自体を改造するのは避けたい。どうしよう。
ということで、アプリケーションヘルパー(ビューのヘルパーでも良い)ファイルにて、「module ApplicationHelper; <略>; end」の外側に、
module WillPaginate::ViewHelpers def my_paginate(collection = nil, options = {}) <この中では will_paginate を呼べる> end end
として改造する。中のその表記の処理は、本当は html をパースしてやるべきなんだが、まあ、正規表現で頑張ることに。
ただ、これが RSpec on Rails に載らない。ヘルパーのスペックといったって、ApplicationHelper では無いわけで、どうしたら良いのだろう。
ビューのスペックで呼んでみても、エラーにこそならないが何も出て来ない。どうしたもんだろう。自分で作った改造メソッドのみならず、will_paginate 自体スペックできない。どうしよう。