2
我有我的應用程序的路線,看起來是這樣的:軌道路由約束正則表達式有隱式錨嗎?
match '/:id' => 'controller#action', :constraints => { :id => VALID_IDS }
其中VALID_IDS就像
/(good_id|another_good_id|a_valid_id)/
一個正則表達式白名單,現在看來該URI
/good_id_one
是不符合此限制,即使
1.9.2p318 :004 > "good_id_one".match /^(good_id|another_good_id|a_valid_id)/
=> #<MatchData "good_id" 1:"good_id">
這是爲什麼?我有一個懷疑。 This guide說
:約束條件需要正則表達式,限制正則表達式錨點不能使用。 但是,請注意,您不需要使用錨點,因爲所有路線都在開始時錨定。
是不是也是軌在年底的正則表達式的增加了一個錨的情況下?這將解釋我所看到的,因爲
1.9.2p318 :006 > "good_id_one".match /^(good_id|another_good_id|a_valid_id)$/
=> nil
但是,我不確定這種懷疑是否正確。任何人都可以證實或否認我的假設?
(P.S.,Rails 3.0.11, Ruby 1.9.2
)
對不起,那文字語法只是用於演示目的。正則表達式匹配器實際上是由Regexp.new(「(good_id | another_good_id | a_valid_id)」)構造的。斜槓不是正則表達式的一部分。 – gregates
在這種情況下,我認爲你需要在/開始。 Regexp.new(「/(good_id | another_good_id | a_valid_id)」)和this *由於錨點而變化。 –
Rails與正則表達式匹配的是'params [:id]',它不包含前導'/'。如果添加,則路由不匹配以下任一路徑:'/ good_id','/ good_id_one'。 – gregates