Ruby on Rails:路由树的层次结构

jpa*_*kal 3 routing ruby-on-rails hierarchical-trees hierarchy

所以我们有一个遗留系统跟踪ID为"欧洲/法国/巴黎"的地方,我正在构建一个Rails外观,将其转换为http:// foobar/places/Europe/France/Paris等URL.这个要求是不可协商的,可能的级别数量无限制,而且我们无法逃避斜线.

http:// foobar/places/Europe设置routes.rb 是微不足道的:

map.resources :places
Run Code Online (Sandbox Code Playgroud)

...但是http:// foobar/places/Europe/France抱怨"没有行动回应欧洲".我试过了:

map.connect '/places/:id', :controller => 'places', :action => 'show' 
Run Code Online (Sandbox Code Playgroud)

...但是这给出了相同的结果,显然:id结束于第一个'/'.如何使ID覆盖"地点"之后的任何内容和所有内容?

Cod*_*lan 6

有关完整文档,请查看路由指南:

http://guides.rubyonrails.org/routing.html

特别是"4.9路线全球化"部分.

但我认为你真正想要做的就是声明你的路线:

map.connect '/places/*id', :controller => 'places', :action => 'index'
Run Code Online (Sandbox Code Playgroud)

用URL来调用

/places/foo/bar/1

Yields a params[:id] => ["foo", "bar", "1"]
Run Code Online (Sandbox Code Playgroud)

您可以轻松(重新)加入"/"以产生您想要的完整字符串"foo/bar/1"(您可能需要手动重新插入前导斜杠.

这应该让你去.