Rails仅使用数字参数进行路由

时间:2012-10-24 12:44:48

标签: ruby-on-rails regex routing

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

这是我的代码:

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

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

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

你必须使用除了特殊字符之外的其他东西它不允许在网址中使用。

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

ids = [1,2,3,4]