will_paginateでAjax対応 Rails3.0系

基本は以下を参考にする。
http://techracho.jp/morimorihoge/2011_06_29/3859

以下、上記だけではハマったことをメモ。

RJSで Element.update が無いというエラー発生

will_pagenate のリンクをクリックすると、ブラウザのダイアログでエラーが出て驚く。
調べてみると、Element は prototype.js で定義されており、jQueryを使っている場合はそれが存在しないので自前で定義してあげる必要がある。 以下を参考に public/javascripts/application.js へ追記する。

// public/javascripts/application.js

Element.update = function (element, html) {
  $('#' + element).html(html);
}

IEでは Element が無いというエラー

上記対応だけでは、IE6 でエラーになる。(またIEかよ!)
Element が無いと言われるので追加してあげる。

// public/javascripts/application.js

var Element = function(){}; // ★追加
Element.update = function (element, html) {
  $('#' + element).html(html);
}

その他参考

will_paginate を Ajax 対応したらレスポンスを JS で返さなくちゃいけないが、基本的な知識が不足していた。 やり方としては、respond_to do |format| で format.js を指定しつつ RJS ファイルを用意してあげる。will_paginate経由でなくて、画面読み込み時に自前で Ajax 読み込みを行う場合などの html で返す場合も併記したりできて便利。以下を参考に。

そういえば、will_pagenate 経由で Ajax を行った場合、クリック時のイベントに処理を追加できないかな。読み込み中 gif とかを表示したいんだけどやり方がわからない。

その他 will_pagenate のスタイルシート

いかにいろんなデザインのCSSが載っていて便利。

current を em に直して使う。