Ruby on rails URI上带有点的参数

Ruby on rails URI上带有点的参数,ruby-on-rails,routing,Ruby On Rails,Routing,在我的应用程序中,有一个资源machine和一个来自machine的嵌套资源:ip 我希望能够通过键入Ip地址来访问Ip的URI URI应该是这样的: /machines/m123/ips/192.168.0.1.xml 其中,“m123”是机器的名称,“192.168.0.1”是该机器的IP之一 这里的问题是rails无法理解ip和格式中的点。当我尝试访问此页面时,我得到: No route matches "/machines/m123/ips/192.168.0.1.xml" 如果我替

在我的应用程序中,有一个资源machine和一个来自machine的嵌套资源:ip

我希望能够通过键入Ip地址来访问Ip的URI

URI应该是这样的:

/machines/m123/ips/192.168.0.1.xml
其中,“m123”是机器的名称,“192.168.0.1”是该机器的IP之一

这里的问题是rails无法理解ip和格式中的点。当我尝试访问此页面时,我得到:

No route matches "/machines/m123/ips/192.168.0.1.xml"
如果我替换了其他字符的点,这意味着rails没有处理URI上的点

有没有办法在routes上输入一个更复杂的regexp,以确保rails能够以我想要的方式处理它

我使用的是rails 2.3.5和ruby 1.8.7


谢谢。

使用
:requirements=>{:param_name=>pattern_regex}
param:

IP_PATTERN = /\A(?:25[0-5]|(?:2[0-4]|1\d|[1-9])?\d)(?:\.(?:25[0-5]|(?:2[0-4]|1\d|[1-9])?\d)){3}\z/.freeze
map.resources :ip, :requirements => { :id => IP_PATTERN }

你能不能考虑放一些像/machines/m123/ips/[192.168.0.1].xml这样的东西?我不熟悉Rail,但我想你会发现URI处理器存在这个问题,“.”是URI的一个重要分隔符,你试图滥用它,尽管是无意的。用另一个字符替换它并在代码中解析它。您确定该模式不正确吗?你能说出问题的名称或提供一个例子来证明它吗?