7

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

我正在使用 will_paginate 2.3.16和 Rails 2.3.14

4

2 回答 2

10

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

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

请确保,您在任何也可以匹配您的控制器操作的路由之上定义此路由。更好的是:排除索引操作,如下所示:

map.resources :lists, :except => [:index]
于 2012-06-15T23:38:43.340 回答
2

您在这里有几个选择:

第一个选项:monkey patch WillPaginate::ActionView::LinkRenderer#url,目前有以下 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),然后:renderer => MyRendererClass在调用 will_paginate 时提供它。

于 2012-06-15T23:35:35.197 回答