为什么不尝试更简单的方法,创建一个包含以下内容的新帮助器(例如app / helpers / will_paginate_helper.rb):
module WillPaginateHelper class WillPaginateJSlinkRenderer < WillPaginate::ActionView::linkRenderer def prepare(collection, options, template) options[:params] ||= {} options[:params]['_'] = nil super(collection, options, template) end protected def link(text, target, attributes = {}) if target.is_a? Fixnum attributes[:rel] = rel_value(target) target = url(target) end @template.link_to(target, attributes.merge(remote: true)) do text.to_s.html_safe end end end def js_will_paginate(collection, options = {}) will_paginate(collection, options.merge(:renderer => WillPaginateHelper::WillPaginateJSlinkRenderer)) end end然后在您的视图中使用此标记进行ajax分页:
<%= js_will_paginate @recipes %>
请记住,分页链接将包含URL的现有参数,您可以如下所示排除这些参数。这是标准的分页功能:
<%= js_will_paginate @recipes, :params => { :my_excluded_param => nil } %>希望能解决您的问题。
说明:
Will_paginate允许您创建自己的 自定义渲染器
。WillPaginateJSlinkRenderer是一个自定义渲染器,此类可以在任何地方定义,而不必在helper模块内部定义。自定义渲染器扩展了标准渲染器(linkRenderer)并仅重新定义了两种方法。
该 准备的方法
是重写明确移除缓存克星参数,因为will_paginate创建与渲染页面时在场的所有参数的网页网址,我们不希望重用缓存克星参数。
该 链接的方法
是从原来的一个复制粘贴linkRenderer源代码,而是创建了远程链接:真正使它成为一个JS
resquest。
最后, js_will_paginate
方法是一个标准的视图助手方法,用于调用常规的will_paginate视图助手方法,但会将我们的自定义渲染器添加到选项中,以便代替常规渲染器使用。



