我在嘗試將will_paginate
鏈接從/list?page=1
的格式更改爲/list/page/1
。我的路線設置正確,但will_paginate
正在鏈接中使用查詢字符串,而不是我漂亮的URL樣式。如何區別?如何更改will_paginate網址?
我使用will_paginate 2.3.16和Rails 2.3.14。
我在嘗試將will_paginate
鏈接從/list?page=1
的格式更改爲/list/page/1
。我的路線設置正確,但will_paginate
正在鏈接中使用查詢字符串,而不是我漂亮的URL樣式。如何區別?如何更改will_paginate網址?
我使用will_paginate 2.3.16和Rails 2.3.14。
will_paginate使用url_for
幫助程序。如果你定義包含它使用的參數的路由,它應該生成漂亮的URL。
map.connect '/lists/page/:page', :controller => 'lists', :action => 'index'
請確保,你定義了這個路線上述也可以匹配你的控制器操作的任何路線。更好:排除像這樣的索引動作:
map.resources :lists, :except => [:index]
您有幾種選擇在這裏:
第一種選擇:猴子補丁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
提供。
謝謝。我剛把我的路線搞砸了!感謝您的回答,這裏有一個賞金 – babonk
現在'map.connect'叫做'match'/ list/page /:page'=>'lists#index''。 Anw,你的'map.connnect' @iblue上有一個錯字,只是說因爲這個帖子對我有用:D如果我錯了,請糾正我,rails新手 – ksugiarto
你是對的。我糾正了錯字。 – iblue