这是我的路线
match "/search/*keywords" => "public/search#index" ,:method=>:get, :as=>:search_with_keywords
一个例子可能是“/ search / country-india / product_type-mobilephones”
使用will paginate创建分页链接
创建分页链接时,* / keywords会导致以下问题
<%= will_paginate @results, :container => false, :class => 'pagination ajax' %>
生成的链接是“http:// localhost:3000 / search?keywords = country-india%2Fproduct_type-mobilephones&amp; lang = en&amp; page = 2”
我想要的是“http:// localhost:3000 / search / country-india / product_type-mobilephones?lang = en&amp; page = 2”
我怎样才能实现这一目标......
答案 0 :(得分:2)
如果您正在使用Will Paginate的Rails 3版本(目前为“3.0.pre2”),那么您可以使用:renderer
选项并自定义链接的生成方式。
首先,如果您不是最新的,那么您可以按照will paginate wiki中的安装说明和使用说明进行操作。
然后在lib
中,您可以创建自己的渲染器来覆盖链接生成,可能类似
class SearchLinkRenderer < WillPaginate::ViewHelpers::LinkRenderer
protected
def url(page)
@base_url_params ||= begin
url_params = base_url_params
merge_optional_params(url_params)
url_params
end
url_params = @base_url_params.dup
add_current_page_param(url_params, page)
@template.search_with_keywords_url(url_params)
end
end
然后用
调用它<%= will_paginate @results, :container => false, :class => 'pagination ajax', :renderer => SearchLinkRenderer %>
默认渲染器使用
@template.url_for(url_params)
这就是“弄乱”您的链接。您可以使用@template
中的任何路径,因此
@template.search_with_keywords_url(url_params)
应该做的伎俩。现在,如果您使用自己的渲染器调用will_paginate,则应该使用您的路径而不是url_for
,并且参数应该很好地匹配。如果他们没有,那么检查url_params
被设置为什么,并将其与您的路线匹配器进行比较。
可能有一种更简单的方法来覆盖它,但这似乎非常简单,并且与will_paginate期望您自定义其输出的方式一致。我发现Rob Anderton有一篇关于自定义will_paginate here的精彩文章,所以也许他们可以提供更多的见解。
答案 1 :(得分:2)