web-dev-qa-db-ja.com

パラメータにドットが含まれるルートが一致しないのはなぜですか?

/iGEL/contributionsのようなユーザー向けのルートがありますが、これは正常に機能します。しかし、今では「A.and.B.」などの名前でユーザーが登録され、名前にドットが含まれているため、ルートが一致しません。

私のルート:

get "/:user/contributions" => 'users#contributions'

何か案は?

77
iGEL

青い情報ボックスを参照してください こちら

デフォルトでは、動的セグメントはドットを受け入れません。これは、ドットがフォーマットされたルートの区切り文字として使用されるためです。動的セグメント内でドットを使用する必要がある場合、これをオーバーライドする制約を追加します。たとえば、:id => /[^\/]+/は、スラッシュ以外のすべてを許可します。

たとえば、次のようになります。

get "/:user/contributions" => 'users#contributions', :constraints => { :user => /[^\/]+/ }
135
Zabba

変数セグメントが最後のものである場合、[^\/] regexもフォーマットを使用します。そのような場合は、むしろ次を使用します。

/([^\/]+?)(?=\.json|\.html|$|\/)/
8
7
huntsfromshadow