如何使用Rails编写关于url中的点字符的正确路由?

时间:2014-12-25 03:12:19

标签: ruby-on-rails

在我的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"

如何让路由在名称中带点的资源上正常工作?

2 个答案:

答案 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 => /[^\/]+/ }