Ruby-带通配符的请求路由不起作用

时间:2018-12-07 07:52:28

标签: ruby-on-rails ruby routes

有人可以建议为什么这两条路线不一样吗

get('/:id/' => 'outlets/play#show', :as => :listen, constraints: { id: /thetrack-a123-bay7623/ } )

get('/:id/' => 'outlets/play#show', :as => :listen, constraints: { id: /thetrack-.*/ } )

我想要实现的只是在有outlets/play#show开头的:id时才使用该路由thetrack

我发现,如果我明确使用那些字符,即在路由中不使用thetrack,则不会使用该路由。但是,如果我使用thetrack-.*,尽管我的请求中没有outlets/play#show,它仍然会进入thetrack路由。

有什么想法吗?

我尝试了其他正则表达式模式,例如 thetrack-.+ thetrack-.+-.+ thetrack-.*-.* 没有运气

1 个答案:

答案 0 :(得分:0)

如果您要执行的操作是将ID为/:id/的任何请求thetrack-路由到outlets/play#show,则您配置的路由应该有效:

get '/:id/', to: 'outlets/play#show', as: :listen, constraints: { id: /thetrack-.*/ }

以下是一些使用此通配符路由到outlets/play#show的示例路径:

  • /thetrack-
  • /thetrack-a123
  • /thetrack-a123-bay7623

/:id/的影响范围很广。检查您是否没有其他冲突的路线。即根级别为/:something/的另一条路由可能会捕获未指定thetrack-的其他请求。