3

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

这是我的代码:

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/):

如何创建仅匹配数字字符串的约束?(只有数字的字符串)

4

2 回答 2

4

默认情况下,rails 锚定路由正则表达式,因此不需要\Aand \Z。我认为您正在寻找遵循这种模式的东西:

:constraints => { :id => /[0-9]+(\%7C[0-9]+)*/ }

这将强制路由至少有一个整数 (0-9)。可选地,该路线后面可以跟一个 | 字符(由浏览器转换为%7C)。该| 字符后跟一个额外的整数 (0-9)。将这种模式放在自己的组中可以防止任何挥之不去 | 在整数 ID 之后。

于 2012-10-24T13:35:28.803 回答
0

您必须使用特殊字符以外的其他内容| 网址中不允许。

我不确定您要在这里做什么。但是,您可以将 :id 作为 id 数组传递。

ID = [1,2,3,4]

于 2012-10-24T13:34:00.970 回答