Ruby on rails 使用will_paginate的RESTful分页路由

Ruby on rails 使用will_paginate的RESTful分页路由,ruby-on-rails,Ruby On Rails,我有这样的嵌套路由: map.resources :foo do |foo| foo.resources :bar do |bar| bar.resources :baz end end http://www.example.com/foo/:id/pages/:page_number http://www.example.com/foo/:id/bar/:id/pages/:page_number 我在每个资源的索引操作中都有一个带有分页的列表,我需要缓存每个页面,为此我需

我有这样的嵌套路由:

map.resources :foo do |foo|
  foo.resources :bar do |bar|
    bar.resources :baz
  end
end
http://www.example.com/foo/:id/pages/:page_number
http://www.example.com/foo/:id/bar/:id/pages/:page_number
我在每个资源的索引操作中都有一个带有分页的列表,我需要缓存每个页面,为此我需要路由是RESTful的,我如何为它实现refful路由

例如,我希望路线如下所示:

map.resources :foo do |foo|
  foo.resources :bar do |bar|
    bar.resources :baz
  end
end
http://www.example.com/foo/:id/pages/:page_number
http://www.example.com/foo/:id/bar/:id/pages/:page_number

在应用程序/帮助程序中创建自定义链接渲染器.rb/

class CustomLinkRenderer < WillPaginate::LinkRenderer
  def page_link(page, text, attributes = {})
    @template.link_to text, "#{@template.url_for(@url_params)}/pages/#{page}", attributes
  end
end

我也有同样的问题。我这样编写了自己的链接渲染器,以充分使用嵌套路由

class PaginationListLinkRenderer < WillPaginate::ViewHelpers::LinkRenderer


protected

  def page_number(page)
    unless page == current_page
      if !@options[:params][:url].to_s.empty?
        tag(:li, link(page, @options[:params][:url] + "?page=" + page.to_s))
      else
        tag(:li, link(page,  page, :rel => rel_value(page)))
      end
    else
      tag(:li, page, :class => "current")
    end
  end

  def previous_or_next_page(page, text, classname)
    if page
      if !@options[:params][:url].to_s.empty?
        tag(:li, link(text, @options[:params][:url] + "?page=" + page.to_s, :class => classname))
      else
        tag(:li, link(text,  page, :rel => rel_value(page), :class => classname))
      end
      #tag(:li, link(text, page), :class => classname)
    else
      tag(:li, text, :class => classname + ' disabled')
    end
  end

  def html_container(html)
    tag(:ul, html, container_attributes)
  end

end
类分页ListLinkRendererrel_值(第页)))
结束
其他的
标签(:li,第页,:class=>“当前”)
结束
结束
定义上一页或下一页(页、文本、类名)
如果页面
如果@选项[:参数][:url]。是否为空?
标记(:li,链接(文本,@options[:params][:url]+“?page=“+page.to_s,:class=>classname))
其他的
标记(:li,链接(文本,页面,:rel=>rel_值(页面),:class=>classname))
结束
#标记(:li,链接(文本,页面),:class=>classname)
其他的
标记(:li,text,:class=>classname+'disabled')
结束
结束
def html_容器(html)
标签(:ul、html、容器属性)
结束
结束
然后您必须使用以下参数调用will_paginate:

<%= will_paginate :params => { :url => project_task_lists_path(@project) }, :renderer => PaginationListLinkRenderer %>
{:url=>project\u task\u list\u path(@project)},:renderer=>PaginationListLinkRenderer%>

我希望这能有所帮助:)

最后,我使用了老派的方式:map.connect'/foo/:id/pages/:page',:controller=>'foo',:action=>'show',:method=>:get,但我必须破解遗嘱页面这正是我为我的项目所做的。这并不理想,但很有效。