我有以下约束:
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如何处理Regex约束呢?为什么这与.match
不一致?
答案 0 :(得分:1)
答案 1 :(得分:0)
^\w+(-\w+)*$
正则表达式无法匹配aa--aa
,因为短划线需要用单词分隔。
我不了解Ruby,但我认为^
和$
隐含在您的约束中,我猜你会得到aa
子串的结果因为不再暗示锚(我在这里可能完全错了)。
我建议采用以下模式:
\w+(?:-+\w+)*
我刚刚在短划线中添加了+
量词,并使该组无法捕捉。