will_paginateでAjaxで遷移(ページ番号リンクをlink_to_remoteへ変更する)
will_paginateはページ番号を自動で出してくれるヘルパーがあって、
<%= will_paginate @users %>
これをviewに書くだけで、ページのリンクを出力してくれます。
でも、ページ遷移をajaxでやりたい場合はこのページのリンクも
link_to_remoteでやる必要があります。
そこで、helperに以下を書いておきます。
class RemoteLinkRenderer < WillPaginate::LinkRenderer def page_link_or_span(page, span_class, text = nil) text ||= page.to_s classnames = Array[*span_class] if page and page != current_page @template.link_to_remote text, :url => url_for(page) else @template.content_tag :span, text, :class => classnames.join(' ') end end end
そして、以下のように呼び出します。
<%= will_paginate @users,:renderer=>"RemoteLinkRenderer" %>
:rendererで上のRemoteLinkRendererを呼ぶように指定します。
Ajaxの呼出し先やパラメータを変えたいという時は
<%= will_paginate @users,:renderer=>"RemoteLinkRenderer", :params=>{:action=>"search"} %>
とします。
Ajaxで呼び出された時のviewを用意し、
controllerのrespond_toで切り替えるようにします。
respond_to do |format| format.html # index.html.erb format.js end
actionの最後にこのように書きます。
こうしておくと、通常のhtmlのリクエストの時は
index.html.erbが呼び出され、
ajaxのリクエストの時は
index.rjsが呼び出されます。
index.rjsの中身は
page.replace_html "user_list",:partial=>"user_list"
です。こうすると、id="user_list"になっている部分が
部分テンプレート_user_list.html.erbによって更新されます。