ruby-on-rails - Rails Route 仅带有数字参数

标签 ruby-on-rails regex routing

我在我的应用程序中有一个自定义路由,每次参数是一个数字或由 | 分割的数字列表时都需要匹配。

这是我的代码:

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/

相关文章:

ruby-on-rails - Bootstrap 3 模式布局问题

ruby-on-rails - Rails、Redis 和哨兵

ruby-on-rails - Rails 3 重写命名路由

ruby-on-rails - 在 Controller 和 View 之间只传递两个变量 - 最佳实践?

javascript - 在另一个模板的元素上引发单击事件

java - 正则表达式提取数字并用千位分隔符对它们进行分组

python - 正则表达式 '\w+' 应该只返回英文单词,但它的工作方式不同

c# - 在 C# 中扩展 [^,]+, 正则表达式

vue.js - Nuxt.js 和内容丰富的网站无法正确生成动态路由

python - flask 重定向多条路线