2011-07-11 14 views
2

ムービーの年が入ったカッコがあるムービー(ルートパス上)のレールルートを作成しようとしています。括弧が拘束されたRORルート

など。黒=> "/男性・イン・ブラック - (1997)" の男性は

私のルートは以下のとおりです。

resources :movies, 
    path:'/', 
    only:[ :index, :list, :show ], 
    constraints: { id: /[A-Za-z0-9-]+\(\d{4}\)/ } 

私はこのルート(movie_path(Movie.first))を使用する場合、私は

を取得しますURLルーティングヘルパーを使用している場合、ルートが機能

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

"ActionController::RoutingError: No route matches: ..." 

私はへのルートの制約を変更する場合。しかし、ルートは逆マッピング(例えば "/ men-in-black-(1997)"を取って正しいアクション/コントローラにルーティングする)のためには機能しません。私は(コンソールから)を実行すると:

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

は私が同じルーティングエラーが発生します。

ActionController::RoutingError: No route matches 

問題はレールがルーティングで正規表現のエスケープどのように関連しているようです。 (\\\をエスケープするとき、オブジェクトへのルートマップは失敗しますが、URLツールートが動作します。しかし、\でエスケープするために(それは反対である。

誰もがこれで任意のヒントや経験を持っている?

答えて

2

回避策として、試してみることができます:

つまり、1つのケースで1つを受け入れ、もう1つのケースで受け入れる場合は、制約を受け入れるようにします。言うことです

:;)

0

は、まあ、私は正規表現制約を書いて多くの経験を持っていないが、あなたは常に、コントローラでワイルドカードルートを行い、その後、サニタイズでき

match 'movies/*movie' => 'movie#action' 

これは、あなたがアクセスできるようになります:。映画のparamをすべてと文字入力

+0

残念ながら、私はSEOの目的のためのルートパスからルートの映画に必要なんだそれは奇妙だが、私はRailsはそれを行うだろうか、それを修正する方法をなぜ分かりません。 –

関連する問題