Rails 3路由约束似乎没有正确匹配正则表达式

时间:2011-03-16 18:36:15

标签: ruby-on-rails rails-routing

我正在使用Rails 3.0.5并且我使用正则表达式约束设置了路由。它曾用于Rails 2.3.5,但它在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

1 个答案:

答案 0 :(得分:2)

我没有解决为什么一个人可能无法工作的原因。

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

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

因此,[\d\w]{40}与适合您的\w{40}没有区别。