will_paginate не имеет встроенной поддержки AJAX, но предлагает отключить рендеринг ссылок.Добавьте следующий класс к remote_link_renderer.rb в RAILS_ROOT / lib, чтобы включить визуализированное представление ссылки, подходящей для обратных вызовов AJAX:
class RemoteLinkRenderer < WillPaginate::LinkRenderer
def prepare(collection, options, template)
@remote = options.delete(:remote) || {}
super
end
protected
def page_link(page, text, attributes = {})
@template.link_to_remote(text, {:url => url_for(page), :method => :get}.merge(@remote))
#replace :method => :post if you need POST action
end
end
Используйте это в своих представлениях для рендеринга ссылок на страницы (при необходимости настройте):
<%= will_paginate(@results, :params => {:controller => :mycontroller, :action => :search, :query => h(@query)}, :renderer => RemoteLinkRenderer, :page_links => false) %>
Контроллер становится немного сложнее, так как вам нужно заменить представление, которое отображало эти ссылки и результаты разбивки на страницы.Я использовал что-то вроде этого:
if request.xhr? or request.post?
if params[:page]
render :update do |page|
page.replace_html :search_results, :partial => 'mycontroller/search_results', :layout => false
end
else
render :partial => 'mycontroller/search_results'
end
else
# Render some normal content here
end