如何更改will_paginate网址?

时间:2012-06-13 20:23:54

标签: ruby-on-rails routes will-paginate

我正在尝试将will_paginate链接从/list?page=1格式更改为/list/page/1。我有正确的路由设置,但will_paginate使用链接中的查询字符串而不是我漂亮的URL样式。怎么说呢?

我正在使用will_paginate 2.3.16 和Rails 2.3.14

2 个答案:

答案 0 :(得分:9)

will_paginate使用url_for助手。如果你定义包含它使用的参数的路由,它应该生成漂亮的URL。

map.connect '/lists/page/:page', :controller => 'lists', :action => 'index'

请确保您在上面定义这条路线任何可能与您的控制器操作相匹配的路线。更好的是:排除这样的索引操作:

map.resources :lists, :except => [:index]

答案 1 :(得分:1)

这里有几个选项:

第一个选项:猴子补丁WillPaginate::ActionView::LinkRenderer#url,目前有以下网址逻辑:

def url(page)
  @base_url_params ||= begin
    url_params = merge_get_params(default_url_params)
    merge_optional_params(url_params)
  end

  url_params = @base_url_params.dup
  add_current_page_param(url_params, page)

  @template.url_for(url_params)
end

所以,我想你可以做"/list/page/#{page}"之类的事情。

另一种方法是完全实现渲染器(通过子类化WillPaginate::ViewHelpers::LinkRenderer),然后在调用will_paginate时将其作为:renderer => MyRendererClass提供。