2537


私の `config/routes.rb` は：

[code]

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

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

[code]

    http://0.0.0.0:3000/tags/node.js/blogs
    
[/code]

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

[code]

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

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


CC BY-SA 3.0
2014-12-25T03:30:50.660
2527
2014-12-25T09:43:39.147
2014-12-25T09:43:39.147
2944
5715
question
ruby-on-rails
Railsで「.」(ドット)を含んだURLルーティングはどう書きますか？


Railsガイドの[動的なセグメントの章](http://railsguides.jp/routing.html#%E5%8B%95%E7%9A%84%E3%81%AA%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88
"Railsのルーティング 3.2 動的なセグメント")の注意書きにもありますが、

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

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

[code]

    resources :tags, only: [], constraints: { id: /[^\/]+/ } do
      resources :blogs, only: [:index]
    end
    
[/code]


CC BY-SA 3.0
2014-12-25T05:09:12.563
2537
2014-12-25T05:09:12.563
2944
2527
answer