带有约束的Rails自定义路由 - 路由要求中不允许使用regexp锚点字符

时间:2012-11-04 20:08:25

标签: regex ruby-on-rails-3 routes syntax-error

我有以下路线:

  get 'users/:user_id/:name', to: 'profiles#show',
    :constraints => { :name => /[a-zA-Z0-9_]+$/ }, as: 'user_profile'

产生错误:

Regexp anchor characters are not allowed in routing requirements: /[a-zA-Z0-9_]+$/

所以我得到^字符是不允许的,但不确定是什么字符产生了这个特定的路由错误。

2 个答案:

答案 0 :(得分:14)

在正则表达式中,我们有两个锚:

  1. 行/字符串^
  2. 的开头
  3. 行尾/字符串$

  4. 尝试从模式中移除$,你应该好好去......

答案 1 :(得分:14)

正则表达式的锚点是^$,但它们在这里没有任何实现。 "(Y)ou don’t need to use anchors because all routes are anchored at the start."

所以约束:

:constraints => { :name => /[a-zA-Z0-9_]+/ }

将执行您想要的操作 - 确保名称由一个或多个这些字符组成,而不是其他任何内容。顺便说一句,你可以简化正则表达式:

:constraints => { :name => /\w+/ }