是,你可以將它們在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
啊,謝謝!後者正是我所期待的。我唯一的問題是,您修改了刪除操作以發送HTTP DELETE,但它實際上並未刪除我表中的任何內容,它只修改數據庫中的is_deleted列。這仍然沒問題,還是應該更改爲GET? – bswinnerton
它絕對**不應該是'GET'。我個人認爲它是一個'DELETE',因爲從用戶的角度來看,資源*被刪除,但其他人會認爲'PUT'更加RESTful。 – deefour