2

アプリに次のようなルートがあります。

match '/:id' => 'controller#action', :constraints => { :id => VALID_IDS }

VALID_IDS は次のような正規表現ホワイトリストです

/(good_id|another_good_id|a_valid_id)/

今では、ウリのようです

/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 に答える