2011-03-10 58 views
0

这是我的路线轨道3:将分页创建不正确的链接

match "/search/*keywords" => "public/search#index" ,:method=>:get, :as=>:search_with_keywords  

一个例子可能是“/搜索/国家印度/产品类型,mobilephones”

正在使用将分页创建分页链接
的* /关键字,同时创建分页链接

<%= will_paginate @results, :container => false, :class => 'pagination ajax' %> 

生成的链接是“导致以下问题HTTP://本地主机:3000 /搜索关键词=国家 - 印度%2Fproduct_type-mobilephones & LANG = EN &页= 2"

我想是的“http://本地主机:3000 /搜索/国 - 印度/产品类型,mobilephones?LANG = EN &页= 2"

我怎样才能做到这一点?

回答

2

如果你使用了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的文章,所以他们可以提供更多的见解。

2

您可能也有兴趣使用Kaminari作为替代will_paginate for Rails 3.我通过Railscast发现它,并且能够快速有效地将它集成到我的应用程序中。我还发现,在切换后,我的应用程序的体积缩小了,性能也有了明显的提高。