如何处理Rails资源路由中的点字符?

lul*_*ala 3 ruby ruby-on-rails ruby-on-rails-3

我希望像这样有SEO优化的网址

http://example.com/sites/1-blau.de/plans
Run Code Online (Sandbox Code Playgroud)

但路径中的点导致Rails陷入困境.如何将点转换为百分比表示形式,以便它可以工作?

我的路线:

resources :sites, only: [] do
  resources :plans, only: [:index, :show] do
  end
end
Run Code Online (Sandbox Code Playgroud)

我尝试过URI.escape和CGI.escape,但都没有用.

URI.escape('a.b')=> "a.b"
CGI.escape('a.b')=> "a.b"
Run Code Online (Sandbox Code Playgroud)

我以为我想要什么

Foo.escape('a.b')=> "a%2Eb"
Run Code Online (Sandbox Code Playgroud)

Len*_*ran 6

使用接受点字符的约束.

get 'sites/:site_name/plans', constraints: { site_name: /[a-zA-Z0-9\.]+/ }
Run Code Online (Sandbox Code Playgroud)

来自doc:

默认情况下,动态段不接受点 - 这是因为点用作格式化路径的分隔符.如果需要在动态段中使用点,请添加一个覆盖它的约束 - 例如,id:/ [^ /] + /允许除斜杠之外的任何内容.