2014-12-05 15 views
0

我想添加一個destroyAll操作,它可以銷燬我寫的博客應用程序中的所有帖子。我有我的routes.rb這樣的:添加'destroyAll'動作和路由到我的RESTful rails應用程序

Rails.application.routes.draw do 
    resources :writings 
    root "writings#index" 
end 

我的控制器中我想添加了以下行動:

def destroyAll 
    @writing = Writing.all 
    @writing.each.destroy 
end 

請指導我如何將路由添加到destroyAll行動,以及如何在我的視圖中使用它來建立一個鏈接來使用這個動作。

感謝這麼多提前

+1

你有一個bug,'@ writing.each.destroy'錯誤,提高錯誤 – 2014-12-05 11:52:31

+0

我應該用替換它,好嗎? – 2014-12-05 12:31:40

回答

2

應該被定義爲writings收集路線:

resources :writings do 
    collection do 
    delete :destroy_all 
    end 
end 

有了它,您可以鏈接到delete_all動作是這樣的:

link_to 'delete all', [:destroy_all, :writings], method: :delete 

你應該注意到我寫了delete_all而不是deleteAll,因爲前者堅持使用Ruby命名公司nvention。

+0

哦,然後如何在我的視野內使用這條路線?我是否使用link_to「全部刪除」,delete_all_path?我會在10分鐘內接受你的回答 – 2014-12-05 11:20:14

+1

@ user3247496我編輯了我的答案,以便說明如何鏈接到此操作。 – 2014-12-05 11:21:00

+0

你是最棒的男人。非常感激。 – 2014-12-05 11:21:44

0

我認爲Marek Lipka的回答完全合適,但我想提供一個替代方案,即IMFO稍微有些REST風格。我會將所有writings的集合建模爲一個單獨的資源。由於這種資源不具有的ID和只能有這個資源的一個實例,它必須是一個單一的資源:

resource :writings, only: :destroy 

這裏的問題是,Rails會這個動作映射到WritingsController#destroy,因爲Rails的對單數資源使用複數控制器(無論如何,我們的單數資源都有複數名稱),所以這將與個別着作的destroy行爲相沖突。在這種情況下,你既可以創建一個自定義控制,這和實施有沒有破壞作用:

resource :writings, only: :destroy, controller: 'collections/writings' 

,或者你仍然可以使用舊的控制器,但指定另一個動作:

resource :writings, only: :destroy, action: :destroy_all 

在這種情況下, ,你可以使用下面的在你的觀點:

link_to 'delete all', writings_path, method: :delete 
相關問題