LoginSignup
22
14

More than 5 years have passed since last update.

Railsのルーティングでドットを含んだURLを生成

Posted at

Railsで、/skills/react.jsみたいな、ドット入りのURLを実現したいとき。

ドットはhtmlやjsonなどのフォーマットを表すのに利用するため、例えば

config/routes
get "/skills/:name" => "skills#show"

と書いて、/skills/react.jsにアクセスしてもうまくいかない。
ログを見ると、ドット以降のURLは省かれ、Parameters: {"name"=>"react"}となっているのが分かる。(ホントはparams[:name]"react.js"が入ってほしい)

これを回避するには、:constraintsオプションを利用して、動的セグメント部分(:name)のフォーマットに制約を付ける。

参考: Rails のルーティング — Rails ガイド

上記のルーティングを以下のように変更する。

config/routes
get "/skills/:name" => "skills#show", constraints: { name: /[^\/]+/ }

:nameの部分に許可する文字列を正規表現で指定。上の例だとスラッシュ以外の文字列を許可したことになる。
再度アクセスすると、Parameters: {"name"=>"react.js"}になっており、ドット入りの動的URLを利用することが可能になっているのが分かる。

22
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
14