gpt4 book ai didi

ruby-on-rails - 约束中带括号的 ROR 路由

转载 作者:太空宇宙 更新时间:2023-11-03 16:09:35 27 4
gpt4 key购买 nike

我正在尝试为电影创建一个 rails 路线(在根路径上),其中有包含电影年份的括号。

例如黑衣人 => "/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)”并将其路由到正确的操作/ Controller )。当我运行时(从控制台):

Rails.application.routes.recognize_path("/men-in-black-(1997)")

我得到了同样的路由错误:

ActionController::RoutingError: No route matches

问题似乎与 rails 如何在路由中转义正则表达式有关。对于使用\( 进行转义,对象到路由映射失败,但 url 到路由有效。但是当使用\\\( 进行转义时,情况恰恰相反。

有人对此有任何提示或经验吗?

最佳答案

作为变通办法,您可以尝试:

constraints: { id: /[A-Za-z0-9-]+(\\\(\d{4}\\\)|\(\d{4}\))/ }

也就是说,如果约束在一种情况下接受一个而在另一种情况下接受另一个,则使约束接受其中之一。

也就是说:这很奇怪,我不知道为什么 Rails 会这样做或如何修复它;)

关于ruby-on-rails - 约束中带括号的 ROR 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6657560/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com