2012-06-13 141 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提供。