我有一组看起来像这样的路线:
resources :placements do
match '/foo' => "placements#foo"
match '/bar' => "placements#bar"
end
这会产生与您期望的行为相符的路线:
/placements/1234/foo
/placements/1234/bar
但是,对于一些不需要单独放置的方法,我也需要“通用”路由。所以,我构建了一个如下所示的路由块:
resources :placements do
match '/foo' => "placements#foo"
match '/bar' => "placements#bar"
end
match '/placements/baz' => "placements#baz"
如果我rake routes
,我会得到一条看起来不错的路线:
/placements/baz
注意缺少id。但是,如果我尝试访问该路由,Rails会尝试在控制器上调用show
方法,就好像“baz”是ID,而不是方法名称。我如何构建一个路由结构,让我能够获得我所追求的内容,而不必将路由的第一段(placements
)更改为其他内容?
答案 0 :(得分:1)
将第二条路线移到resources
区块上,即
match '/placements/baz' => "placements#baz"
resources :placements, :id => /\d+/ do
match '/foo' => "placements#foo"
match '/bar' => "placements#bar"
end
或为id
中的resources
添加正则表达式,例如:
resources :placements, :id => /\d+/ do
match '/foo' => "placements#foo"
match '/bar' => "placements#bar"
end
match '/placements/baz' => "placements#baz"