【发布时间】: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
我正在尝试将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
你有几个选择:
第一个选项:猴子补丁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。
【讨论】:
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 新手