rails 3:将分页创建错误的链接

时间:2011-03-10 10:57:28

标签: ruby-on-rails-3 will-paginate

这是我的路线

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”

我怎样才能实现这一目标......

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)

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