пагинация с помощью ajax в рельсах 2.3.8 - PullRequest
0 голосов
/ 31 октября 2011

Может кто-нибудь предложить мне, как использовать will_paginate с ajax в рельсах 2.3.8, что я должен сделать изменения в следующей строке кода в ClientController

def index

    @clients = Client.paginate(:per_page => 5, :page => params[:page])
    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @clients }
    end

end

и в файле представления индекса

<%= will_paginate @clients %>

1 Ответ

1 голос
/ 31 октября 2011

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...