Rails3 で Ajax (will_paginate 2.3.15 対応)

以前、http://d.hatena.ne.jp/nedate/20101006/1286341476 にて Rails3 で link_to_remote + will_paginate に対応する方法を書きましたが、will_paginate のバージョンが上がったらこの対応では正常に動作しなくなりました orz

というわけで、will_paginate 2.3.15 にて link_to_remote に対応する方法です。

まずは、app/helpers/remote_link_renderer.rb に下記のような内容を記述します。

class RemoteLinkRenderer < WillPaginate::LinkRenderer
  def page_link(page, text, attributes = {})
    params = @options[:params][:url]
    params[:page] = page

    @template.link_to_remote(
      text,
      {
        :url => params,
        :update => @options[:params][:update],
        :loading => @options[:params][:loading]
      }
    )
  end
end

そして will_paginate を下記のように書いてあげれば動くようになると思います。

<%= will_paginate(
    @users,
    :renderer => RemoteLinkRenderer,
    :params => {
      :url => {:action => 'show'},
    },
    :update => 'detail_zone',
    :loading => "showLoading('small', 'detail_zone')"
) -%>