2012-07-16 63 views
0

我有一組路線,看起來像這樣:的Rails 3:標準的資源混合航線「通用」控制器路線

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

見http://stackoverflow.com/問題/ 11356453 /自定義動作,在護欄控制器與 - 寧靜,動作/ 11358656#11358656 – Stefan 2012-07-16 14:17:51

回答

1

移動第二條路線在resources塊即

match '/placements/baz' => "placements#baz" 
resources :placements, :id => /\d+/ do 
    match '/foo' => "placements#foo" 
    match '/bar' => "placements#bar" 
end 

resources添加一個正則表達式的id,即是這樣的:

resources :placements, :id => /\d+/ do 
    match '/foo' => "placements#foo" 
    match '/bar' => "placements#bar" 
end 
match '/placements/baz' => "placements#baz"