Railsで「.」(ドット)を含んだURLルーティングはどう書きますか?

投稿者: Anonymous

私の config/routes.rb は:

resources :tags, only: [] do
  resources :blogs, only: [:index]
end

もし私「node.js」というタグを作成すれば、URLをアクセスするときに

http://0.0.0.0:3000/tags/node.js/blogs

ルートエラーがありました:

No route matches [GET] "/tags/node.js/blogs"

どうやってその . が識別できますか?

解決

Railsガイドの動的なセグメントの章の注意書きにもありますが、

動的なセグメント分割ではドット.をデフォルトでは使用できません。ドットはフォーマット済みルーティングでは区切り文字として使用されるためです。どうしても動的セグメント内でドットを使用したい場合は、デフォルト設定を上書きする制限を与えます。たとえばid: /[^/]+/とすると、スラッシュ以外のすべての文字が使用できます。

そこで以下の様に制約を追加することで望んだ挙動になるかと思います。

resources :tags, only: [], constraints: { id: /[^/]+/ } do
  resources :blogs, only: [:index]
end
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *