Ruby on rails 在Rails 4的子组中,Routes regex约束未按预期工作
我有以下限制:Ruby on rails 在Rails 4的子组中,Routes regex约束未按预期工作,ruby-on-rails,regex,routes,Ruby On Rails,Regex,Routes,我有以下限制: get '/:name' => "products#show", :as => :product, :constraints => {name: /\w+(-\w+)*/} 以下网址: /aa--aa 将返回一个No route matches[GET]“/aa--aa” 但是如果我执行/\w+(\w+*/.match('aa--aa')我将得到一个MatchData对象。那么,Rails如何处理正则表达式约束呢?为什么这与.match不一致?正则表达式不能
get '/:name' => "products#show", :as => :product, :constraints => {name: /\w+(-\w+)*/}
以下网址:
/aa--aa
将返回一个No route matches[GET]“/aa--aa”
但是如果我执行/\w+(\w+*/.match('aa--aa')
我将得到一个MatchData对象。那么,Rails如何处理正则表达式约束呢?为什么这与.match
不一致?正则表达式不能匹配aa--aa
,因为破折号需要用单词分隔
我不知道Ruby,但我认为^
和$
在您的约束中是隐式的,我猜您将得到aa
子字符串的结果,因为锚不再是隐式的(这里我可能完全错了)
我建议采取以下模式:
\w+(?:-+\w+)*
我刚刚在破折号中添加了一个
+
量词,并使组不可捕获。Rails将嵌入您的约束,如下所示:
/\A#{tests[key]}\Z/ === parts[key]
见此:
这就是为什么这不会通过