【发布时间】:2011-07-11 22:41:17
【问题描述】:
我正在尝试为电影(在根路径上)创建一个轨道路线,其中包含包含电影年份的括号。
例如黑衣人 => "/men-in-black-(1997)"
我的路线是:
resources :movies,
path:'/',
only:[ :index, :list, :show ],
constraints: { id: /[A-Za-z0-9-]+\(\d{4}\)/ }
当我使用这条路线 (movie_path(Movie.first)) 时,我得到了
"ActionController::RoutingError: No route matches: ..."
当我将路由约束更改为:
constraints: { id: /[A-Za-z0-9-]+\\\(\d{4}\\\)/ }
使用 url 路由助手时,该路由有效。但是,该路由不适用于反向映射(例如,采用“/men-in-black-(1997)”并将其路由到正确的操作/控制器)。当我运行时(从控制台):
Rails.application.routes.recognize_path("/men-in-black-(1997)")
我遇到同样的路由错误:
ActionController::RoutingError: No route matches
这个问题似乎与 rails 如何在路由中转义正则表达式有关。对于使用 \( 转义,对象到路由映射失败,但 url-to-route 有效。但是当使用 \\\( 转义时,情况正好相反。
有人对此有任何提示或经验吗?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 routing