1. 程式人生 > >Rails高階路由知識:手動為路由建立名稱

Rails高階路由知識:手動為路由建立名稱

常規在routes.rb中設定的路由規則,rails都會為我們順便建立一個名稱,比如:

risks GET    /risks(.:format)                        risks#index
                             POST   /risks(.:format)                        risks#create
                    new_risk GET    /risks/new(.:format)                    risks#new
                   edit_risk GET
/risks/:id/edit(.:format) risks#edit risk GET /risks/:id(.:format) risks#show PATCH /risks/:id(.:format) risks#update PUT /risks/:id(.:format) risks#update
DELETE /risks/:id(.:format) risks#destroy

如上所列,用resources :risks建立的增刪改查的全套路由,注意最前面的諸如edit_risk之類的名稱,後面加上path就可以在view或controller裡使用了:

link_to("編輯風險",edit_risk_path(@risk))

很方便吧,你不用再費時寫”/risks/#{id}”之類的東東了.

不過有些情況下,rails不會為個別方法建立名稱,因為它不知道替你取什麼名字好啊.比如我在risks中再新增一個新方法:

resources :risks do
    collection do
      post "fake_delete/:id"=>"risks#fake_delete"
    end
  end

上生成的路徑就沒有名稱,不信!?你可以自己敲rake routes看一下:

POST   /risks/fake_delete/:id(.:format)        risks#fake_delete

噥,post前面沒有東東吧!?為了方便起見我們還是想自己手動設一個名稱,OK!相當的簡單,在原路徑後面加上as引數即可:

post "fake_delete/:id"=>"risks#fake_delete",as:"fake_delete"

再看生成的路由:

fake_delete_risks POST   /risks/fake_delete/:id(.:format)        risks#fake_delete