在导轨路径中有一个点

在导轨路径中有一个点

问题描述:

我正在使用Rails 2.3.11。如果我有像http://www.abc.com/users/e.f.json这样的网址,我希望id是'e.f',预期的格式是'json'。有人可以请建议一种方法来做到这一点。 谢谢!在导轨路径中有一个点

+1

我对2.3中的路由语法并不熟悉,但是您可以尝试向该格式添加一个约束来禁止句点。这应该有助于将格式保持为仅最后一个以点分隔的片段,但是如果您不使用格式,则将使用部分ID作为格式。 – coreyward

+0

[Rails - Params with“dot”(例如/google.com)](http://*.com/questions/2952235/rails-params-with-dot-e-g-google-com)的可能重复 –

由于:格式约定,Rails将解析所有参数而没有任何点。你可以有route parameters with dots如果你想:

# You can change the regex to more restrictive patterns 
map.connect 'users/:id', :controller => 'users', :action => 'show', :id => /.*/ 

但因为这两个“*”和“+”正则表达式通配符是贪婪的,它会忽略的:完全参数(格式)。现在

,如果你绝对必须的用户名点,还有一个伪解决方法,可以帮助你:

map.connect 'users/:id:format', :controller => 'users', :action => 'show', :requirements => { :format => /\.[^.]+/, :id => /.*/ } 
map.connect 'users/:id', :controller => 'users', :action => 'show' 

的缺点是,你必须包括在点:格式的正则表达式,否则会被用户名表达式捕获。然后你必须在你的控制器中处理点状格式(例如:.json)。

下面是一个类似于andersonvom的解决方案,但它保持一个规则(并使用一些现代的Rails路由缩写)。

map.connect 'users/:id(.:format)', to: 'users#show', id: /.*?/, format: /[^.]+/ 

(注意在:format前面的.

诀窍是添加一个可选的格式,(.:format)并使ID正则非贪婪所以格式是公认的。如果你想给路由一个名字,保持它的一个规则是很重要的,这样你就可以以格式不可知的方式将它用于重定向,链接等。