2011-03-16 100 views
2

我正在使用Rails 3.0.5,并且我使用正则表达式约束来设置路由。它曾经on Rails的2.3.5工作,但它不是对Rails 3的工作路线是这样的:Rails 3路由约束似乎没有正确匹配正则表达式

get '/:version_id' => 'pastes#show', :constraints => { :version_id => /[\d\w]{40}/ } 

它不会在所有的工作。但是,以下工作:

get '/:version_id' => 'pastes#show', :constraints => { :version_id => /.{40}/ } 

get '/:version_id' => 'pastes#show', :constraints => { :version_id => /\w{40}/ } 

get '/:version_id' => 'pastes#show' 

Rails处理[]匹配的方式有什么问题吗?还是我做错了什么?

VERSION_ID通常看起来是这样的:

816616001d7ce848944a9e0d71a5a22d3b546943 
+0

这是获取声明嵌套在某处或是它的顶级声明? I.e你怎么称呼你的榜样?本地主机:3000/816616001d7ce848944a9e0d71a5a22d3b546943 - 工作吗? – 2011-03-16 18:57:53

回答

2

我没有解决,为什么一个可能不会比其他工作。

但是,根据PickAxe的书,\w实际上是\d的超集。

\w [A-Za-z0-9\_] ASCII word character 
\d  [0-9]  ASCII decimal digit character 

因此,[\d\w]{40}没有从\w{40}不同,这对你的作品。