我試圖只路由一個http動詞。說我有一個評論資源,像這樣:在Rails中路由HTTP動詞
map.resources :comments
,並希望能夠通過發送DELETE /comments
要求銷燬所有意見。即我希望能夠只映射http動詞,而不需要路由的「動作名稱」部分。這可能嗎?
乾杯
我試圖只路由一個http動詞。說我有一個評論資源,像這樣:在Rails中路由HTTP動詞
map.resources :comments
,並希望能夠通過發送DELETE /comments
要求銷燬所有意見。即我希望能夠只映射http動詞,而不需要路由的「動作名稱」部分。這可能嗎?
乾杯
你可以這樣做:
map.resources :comments, :only => :destroy
產生類似的路線如下(你可以用rake routes
驗證)
DELETE /comments/:id(.:format) {:controller=>"comments", :action=>"destroy"}
但需要注意的是REST風格的破壞設計用於刪除特定記錄不是全部 r ecords,所以這條路線仍然期待:id參數。黑客可能會傳遞一些哨兵價值:id代表你的應用程序上下文中的「全部」。另一方面,如果您的評論屬於另一個模型,那麼刪除其他模型也會/應該刪除評論。這通常是如何正常發生多行刪除的。
由於這不是標準的REST風格,您需要使用自定義路由。
map.connect '/comments',
:controller => 'comments',
:action => "destroy_all",
:conditions => { :method => :delete }
在你的控制器:
class CommentsController < ApplicationController
# your RESTful actions here
def destroy_all
# destroy all your comments here
end
end
考慮,調用是這樣的:
<%= link_to "delete all comments",
comments_path,
:method => :delete,
:confirm => "Are you sure" %>
PS。我沒有測試這個代碼,但我認爲它應該工作。
不會這個動作最好只與 加入map.resources:comments,:collection => {:destroy_all =>:delete} 我覺得只是刪除'收集資源將更'RESTful' ... 感謝您的回覆:) – 2010-07-07 11:21:39
使用:collection屬性會將URL生成爲/ messages/delete_all,並且根據問題是不可取的。 – 2010-07-07 11:27:22
在這種情況下,意見的資源只是虛構的^^有真應了辦法做到這一點,就像默認的「刪除」路線呢... – 2010-07-07 10:41:09