我想在will_paginate中使用page_cache。
在下面的页面上有很好的信息。
http://railsenvy.com/2007/2/28/rails-caching-tutorial#pagination http://railslab.newrelic.com/2009/02/05/episode-5-advanced-page-caching
我写的routes.rb看起来像这样:
map.connect '/products/page/:page', :controller => 'products', :action => 'index'但是,url的链接不会更改为will_paginate帮助程序中的“/products/page/:page”。他们仍然是“products?page=2”
如何更改will_paginate中的url格式?
发布于 2010-01-12 21:19:55
该路由是否声明在任何RESTful资源路由之上?也就是说,您的路由文件应如下所示:
map.connnect '/products/page/:page', :controller => 'products', :action => 'index'
map.resources :products, :except => [:index]如果您的路由看起来是正确的,您可以尝试修补will_paginate生成页面链接的方式。它在WillPaginate::ViewHelpers#url_for(page)中这样做。为了处理一些棘手的边缘情况,这是一些相当复杂的逻辑,但您可以先为您的product编写一个尝试简单版本的新版本:
# in lib/cache_paginated_projects.rb
WillPaginate::ViewHelpers.class_eval do
old_url_for = method(:url_for)
define_method(:url_for) do |page|
if @template.params[:controller].to_s == 'products' && @template.params[:action].to_s == 'index'
@template.url_for :page => page
else
old_url_for.bind(self).call(page)
end
end
end发布于 2010-01-21 03:45:23
这对我很管用
app/helpers/custom_link_renderer.rb
class CustomLinkRenderer < WillPaginate::LinkRenderer
def page_link(page, text, attributes = {})
@template.link_to text, "#{@template.url_for(@url_params)}/page/#{page}", attributes
end
end将此行添加到config/environment.rb文件
WillPaginate::ViewHelpers.pagination_options[:renderer] = 'CustomLinkRenderer'发布于 2010-06-02 17:54:39
除了目前的答案之外,我不得不花几个小时才能弄清楚。
如果你有一些更复杂的路由,例如在我的例子中包括过滤,确保“更高级别”的路由首先出现在上(而不仅仅是它们在RESTful路由之上),否则will_paginate会选择第一个可用的路由,并以一种不美观的方式将额外的参数粘贴到的末尾。
所以在我的例子中,我最终得到了这个:
map.connect "wallpapers/:filter/page/:page", :controller => "wallpapers", :action => "index", :requirements => {:page => /\d+/, :filter => /(popular|featured)/ }
map.connect "wallpapers/page/:page", :controller => "wallpapers", :action => "index", :requirements => {:page => /\d+/ }
map.resources :wallpapers所以现在我得到了漂亮的URL,比如: wallpapers/popular/page/2而不是wallpapers/page/2?filter=popular
https://stackoverflow.com/questions/2045694
复制相似问题