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">

这是为什么?我有一个怀疑。本指南

:constraints 采用正则表达式,但不能使用正则表达式锚。但是,请注意,您不需要使用锚点,因为所有路线都在开始时锚定。

rails 在正则表达式的末尾添加一个锚也是这种情况吗?这可以解释我所看到的,因为

1.9.2p318 :006 > "good_id_one".match /^(good_id|another_good_id|a_valid_id)$/
 => nil

但是,我不确定这种怀疑是否正确。谁能证实或否认我的假设?

(ps, Rails 3.0.11, Ruby 1.9.2)

4

1 回答 1

-1

这不是因为隐含的锚点,而是因为 / 在你的表达式末尾。

尝试:

/(good_id|another_good_id|a_valid_id)
于 2012-09-17T15:13:38.693 回答