我正在尝试将will_paginate
链接从格式更改/list?page=1
为/list/page/1
. 我为此设置了正确的路由,但是will_paginate
在链接中使用查询字符串而不是我漂亮的 URL 样式。不然怎么说?
我正在使用 will_paginate 2.3.16和 Rails 2.3.14。
我正在尝试将will_paginate
链接从格式更改/list?page=1
为/list/page/1
. 我为此设置了正确的路由,但是will_paginate
在链接中使用查询字符串而不是我漂亮的 URL 样式。不然怎么说?
我正在使用 will_paginate 2.3.16和 Rails 2.3.14。
will_paginate 使用url_for
助手。如果您定义包含它使用的参数的路由,它应该会生成漂亮的 url。
map.connect '/lists/page/:page', :controller => 'lists', :action => 'index'
请确保,您在任何也可以匹配您的控制器操作的路由之上定义此路由。更好的是:排除索引操作,如下所示:
map.resources :lists, :except => [:index]
您在这里有几个选择:
第一个选项: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 时提供它。