【问题标题】:How to change will_paginate URLs?如何更改 will_paginate 网址?
【发布时间】:2012-06-16 21:01:19
【问题描述】:

我正在尝试将will_paginate 链接的格式从/list?page=1 更改为/list/page/1。我为此设置了正确的路由,但will_paginate 在链接中使用查询字符串而不是我漂亮的 URL 样式。不然怎么判断?

我正在使用 will_paginate 2.3.16 和 Rails 2.3.14

【问题讨论】:

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


    【解决方案1】:

    你有几个选择:

    第一个选项:猴子补丁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),然后在调用 will_paginate 时将其提供为:renderer => MyRendererClass

    【讨论】:

      【解决方案2】:

      will_paginate 使用 url_for 助手。如果您定义包含它使用的参数的路由,它应该会生成漂亮的 url。

      map.connect '/lists/page/:page', :controller => 'lists', :action => 'index'
      

      请确保,您在上方定义了此路由,该路由也可以匹配您的控制器操作。更好的是:像这样排除索引操作:

      map.resources :lists, :except => [:index]
      

      【讨论】:

      • 谢谢。我只是把我的路线搞砸了!感谢您的回答,这是一个赏金
      • 现在map.connect 称为match '/list/page/:page' => 'lists#index'。 Anw,你的map.connnect@iblue 上有一个错字,只是说因为这篇文章对我有用:D 如果我错了,请纠正我,rails 新手
      猜你喜欢
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 2018-11-14
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多