2011-03-16 98 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}不同,這對你的作品。