2012-06-13 97 views
6

我在尝试将will_paginate链接从/list?page=1的格式更改为/list/page/1。我的路线设置正确,但will_paginate正在链接中使用查询字符串,而不是我漂亮的URL样式。如何区别?如何更改will_paginate网址?

我使用will_paginate 2.3.16和Rails 2.3.14

回答

9

will_paginate使用url_for帮助程序。如果你定义包含它使用的参数的路由,它应该生成漂亮的URL。

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

请确保,你定义了这个路线上述也可以匹配你的控制器操作的任何路线。更好:排除像这样的索引动作:

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

谢谢。我刚把我的路线搞砸了!感谢您的回答,这里有一个赏金 – babonk

+3

现在'map.connect'叫做'match'/ list/page /:page'=>'lists#index''。 Anw,你的'map.connnect' @iblue上有一个错字,只是说因为这个帖子对我有用:D如果我错了,请纠正我,rails新手 – ksugiarto

+0

你是对的。我纠正了错字。 – iblue

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提供。