在我的config/routes.rb
文件中,我创建了一个嵌套资源,如下所示:
resources :tags, only: [] do
resources :blogs, only: [:index]
end
问题是,如果我创建一个名为node.js
的标签,当我通过以下方式访问该页面时:
http://0.0.0.0:3000/tags/node.js/blogs
我收到路由错误:
No route matches [GET] "/tags/node.js/blogs"
如何让路由在名称中带点的资源上正常工作?
答案 0 :(得分:2)
来自Rails Routing from the Outside In, section 3.2:
默认情况下,动态细分不接受点 - 这是因为 dot用作格式化路由的分隔符。如果你需要使用 在动态细分中,添加一个覆盖此约束的约束 - 例如,id:/ [^ /] + /允许除斜杠之外的任何内容。
因此,请按照以下方式制作您的路线:
resources :tags, only: [], id: /[^\/]+/ do
resources :blogs, only: [:index], id: /[^\/]+/
end
答案 1 :(得分:1)
看一下这篇文章https://stackoverflow.com/a/5369702
点(。)通常用于分隔
那就是:例如:
get "/:user/contributions" => 'users#contributions', :constraints => { :user => /[^\/]+/ }