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 自体スペックできない。どうしよう。