我正在尝试将will_paginate
链接从/list?page=1
格式更改为/list/page/1
。我有正确的路由设置,但will_paginate
使用链接中的查询字符串而不是我漂亮的URL样式。怎么说呢?
我正在使用will_paginate 2.3.16 和Rails 2.3.14 。
答案 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
提供。