为了保持向后兼容性,我们需要将/sitemap_1234000.xml映射到站点地图控制器,并将1234000作为ID传递。我试过了
map.connect '/sitemap_:id.xml', :controller => 'sitemap',
:action => 'show'
但是当我做的时候
assert_routing '/sitemap_1234000.xml', :controller => 'sitemap',
:action => 'show',
:id => "1234000"
我被告知'/sitemap_1234000.xml'没有路由存在。我可以在rails 2.3路由中的下划线后绑定参数吗?
答案 0 :(得分:0)
您可以使用通配符:
map.connect '/sitemap_(*id).xml, :controller=>'sitemap', :action=>'show'
然后params [:id]应该给你你想要的东西。
未经测试 - 让我知道这是否有效
答案 1 :(得分:0)
在铁轨内部进行了一些挖掘之后,这就是我想出来的:
config/initializers/bound_parameter_after_underscore.rb
module ActionController
module Routing
class RouteBuilder
def initialize_with_bound_parameter_after_underscore
initialize_without_bound_parameter_after_underscore
@nonseparator_regexp = /\A([^#{Regexp.escape(separators.join)}:\*]+)/
end
alias_method_chain :initialize, :bound_parameter_after_underscore
end
end
end
这会阻止冒号和星号出现在静态段中。以前查找静态段的正则表达式占用了所有sitemap_:id
;现在它消耗sitemap_
并离开:id
,然后将其识别为您希望的。