因此,我们已经得到了跟踪与地方像“欧洲/法国/巴黎” ID的遗留系统,和我建立一个Rails门面把它变成网址,如http:// foobar的/地区/欧洲/法国/巴黎。这个要求是不议价,在无限可能电平的数目,我们无法逃避的斜线。

设置为routes.rb中的http:// foobar的/地区/欧洲是微不足道的:

map.resources :places

...但HTTP:// foobar的/地区/欧洲/法国抱怨 “不采取行动应对欧洲”。我想:

map.connect '/places/:id', :controller => 'places', :action => 'show' 

...但是这给出了同样的结果,如显然:ID在第一“/”结束。如何让我的ID覆盖后的“地方”予取予求?

有帮助吗?

解决方案

看一看路由指南的完整文档:

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

具体部分 “4.9路线通配”。

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

map.connect '/places/*id', :controller => 'places', :action => 'index'

与URL调用等

/places/foo/bar/1

Yields a params[:id] => ["foo", "bar", "1"]

,你可以很容易地(再)用“/”,获得你想要的满弦加入“富/酒吧/ 1”(您可能必须手动重新插入斜线。

这应该让你去。

其他提示

我调整Cody的答案略高于想出这样:

map.place '/places/*id', :controller => 'places', :action => 'show'
map.connect '/places/*id.:format', :controller => 'places', :action => 'show'

通过使用map.place代替map.connect时,Rails知道我们正确处理什么资源与和产生place_urlplace_path等帮手。

现在,2号线的应该的工作,但并不感谢以上的bug,所以这里的places_controller.rb一个变通方法,手动拆分ID,并设置格式,默认为XML:

id, suffix = params[:id].join('/').split('.') 
params[:format] = suffix ? suffix : "xml"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top