我在我的应用程序中有一个自定义路由,每次参数是一个数字或由 |
分割的数字列表时都需要匹配。
这是我的代码:
get '/lists' => 'cidades#list'
get '/list(/:id)' => 'cidades#list', :constraints => { :id => /[0-9|]+/ }
get '/list(/:name)' => 'cidades#list'
我希望完成的是这样的:
/lists => cidades#list
/list/1 => cidades#list & param[:id] = "1"
/list/1|2|3|4 => cidades#list & param[:id] = "1|2|3|4"
/list/1a => cidades#list & param[:name] = "1a"
如果我使用这个正则表达式:
/[0-9|]+/
我得到 1a
有效,但我不想要这个。我发现这个正则表达式:/\A[0-9|]+\Z/
但这给了我这个错误:ArgumentError (Regexp anchor characters are not allowed in routing requirements: /\A[0-9|]+\Z/):
如何创建仅匹配数字字符串的约束? (只有数字的字符串)
最佳答案
默认情况下,rails anchor 定路由正则表达式,因此不需要 \A
和 \Z
.我认为你正在寻找遵循这种模式的东西:
:constraints => { :id => /[0-9]+(\%7C[0-9]+)*/ }
这将强制路由具有至少一个整数 (0-9)。可选地,该路由可以跟随一个 |字符(被浏览器转换为
%7C
)。的|字符后跟一个额外的整数 (0-9)。把这个模式放在它自己的组中可以防止任何挥之不去|在整数 ID 之后。
关于ruby-on-rails - Rails Route 仅带有数字参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13049498/