2012-12-20 43 views
1

我只是想知道是否有更好的方法來組織這些鐵路線路。也許在一個組?我不熟悉這樣的最佳實踐。更好的方式來組織軌道路線?

TestApp::Application.routes.draw do 
    root :to => 'posts#index' 
    resources :posts, :except => :destroy 
    match '/posts/page/:page' => 'posts#page' 
    match '/posts/delete/:id' => 'posts#delete' 
    match '/posts/undelete/:id' => 'posts#undelete' 
    match '/posts/hide/:id' => 'posts#hide' 
    match '/posts/unhide/:id' => 'posts#unhide' 
    match '/help' => 'help#index' 
end 

回答

2

,你可以將它們在collection塊嵌套塊內的resources :posts如下

resources :posts, :except => :destroy do 
    collection do 
    match 'page/:page' => 'posts#page' 
    match 'delete/:id' => 'posts#delete' 
    match 'undelete/:id' => 'posts#undelete' 
    match 'hide/:id'  => 'posts#hide' 
    match 'unhide/:id' => 'posts#unhide' 
    end 
end 

這些路線不是很REST風格雖然。我可能會建議類似以下內容

resources :posts, :except => :destroy do 
    member do 
    get 'page/:page' => 'posts#page' 
    delete 'delete'  => 'posts#delete' 
    put 'undelete' => 'posts#undelete' 
    put 'hide'  => 'posts#hide' 
    put 'unhide'  => 'posts#unhide' 
    end 
end 

這會創建更乾淨的路由,同時仍指向相同的控制器/操作。你不得不修改你的應用程序指向正確的路線有點不同,以支持這種更被接受的行爲,雖然。

   GET /posts/:id/page/:page(.:format) posts#page 
    delete_post DELETE /posts/:id/delete(.:format)  posts#delete 
undelete_post PUT /posts/:id/undelete(.:format)  posts#undelete 
    hide_post PUT /posts/:id/hide(.:format)   posts#hide 
    unhide_post PUT /posts/:id/unhide(.:format)  posts#unhide 
     posts GET /posts(.:format)     posts#index 
       POST /posts(.:format)     posts#create 
    new_post GET /posts/new(.:format)    posts#new 
    edit_post GET /posts/:id/edit(.:format)   posts#edit 
     post GET /posts/:id(.:format)    posts#show 
       PUT /posts/:id(.:format)    posts#update 
+0

啊,謝謝!後者正是我所期待的。我唯一的問題是,您修改了刪除操作以發送HTTP DELETE,但它實際上並未刪除我表中的任何內容,它只修改數據庫中的is_deleted列。這仍然沒問題,還是應該更改爲GET? – bswinnerton

+0

它絕對**不應該是'GET'。我個人認爲它是一個'DELETE',因爲從用戶的角度來看,資源*被刪除,但其他人會認爲'PUT'更加RESTful。 – deefour