Ruby on Rails路由:如何在路由中使用OR而不对其进行参数化

时间:2015-12-18 19:42:45

标签: ruby-on-rails ruby regex routing routes

所以我有一条路线:

get '/:param1-:param2', param1: /some_constraint/, param2: /some_constraint/

有时我会以格式/:param1 +:param2获取网址。为了解释这一点,我尝试了:

get '/:param1(-|+):param2', param1: /some_constraint/, param2: /some_constraint/

但问题是我认为括号使它成为可选项,因为这就是Rails路由的工作原理。我似乎不能使用正则表达式,除非变量是它的配置。如果我有一个变量:符号分配给( - | +)约束,那么它可以工作。但是我不希望符号变成变量,因为当我构建路径并做其他事情时,我必须记住符号作为参数。有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

记住routes.rb文件是一个Ruby文件,所以你可以循环:

%w(+ -).each |symbol|
  get "/:param1#{symbol}:param2", param1: /some_constraint/, param2: /some_constraint/
end

symbol由于缺少一个更好的名字,但你可以在上下文中找到更多内容。