J'essaie de créer un chemin de fer pour les films (sur le chemin racine) qui contient des parenthèses contenant l'année du film.
Par exemple, Men in black => "/men-in-black-(1997)".
Mon itinéraire est le suivant :
resources :movies,
path:'/',
only:[ :index, :list, :show ],
constraints: { id: /[A-Za-z0-9-]+\(\d{4}\)/ }
Lorsque j'utilise cette route (movie_path(Movie.first)), j'obtiens
"ActionController::RoutingError: No route matches: ..."
Lorsque je change la contrainte d'itinéraire en :
constraints: { id: /[A-Za-z0-9-]+\\\(\d{4}\\\)/ }
la route fonctionne en utilisant l'aide de routage url. Cependant, la route ne fonctionne pas pour le mappage inverse (par exemple, en prenant "/men-in-black-(1997)" et en le routant vers l'action/contrôleur correct). Lorsque j'exécute (depuis la console) :
Rails.application.routes.recognize_path("/men-in-black-(1997)")
J'obtiens la même erreur de routage :
ActionController::RoutingError: No route matches
Le problème semble être lié à la façon dont rails échappe les expressions rationnelles dans le routage. Pour l'échappement avec \(, la carte objet-à-route échoue, mais url-à-route fonctionne. Mais lorsque l'échappement est effectué avec \\\ ( c'est le contraire.
Quelqu'un a-t-il des conseils ou une expérience dans ce domaine ?