Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails 4的子组中,Routes regex约束未按预期工作_Ruby On Rails_Regex_Routes - Fatal编程技术网

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]
见此:

这就是为什么这不会通过