2010-11-14 46 views

回答

470

這是destroydestroy_all方法,如

user.destroy 
User.find(15).destroy 
User.destroy(15) 
User.where(age: 20).destroy_all 
User.destroy_all(age: 20) 

或者您可以使用deletedelete_all,不會強制執行:before_destroy:after_destroy回調或任何相關的關聯選項。

User.delete_all(condition: 'value')將允許你刪除記錄 沒有主鍵

+23

如果用戶模型沒有主鍵,則user.destroy不起作用 – hammady 2013-10-24 11:06:04

+0

它應該是'User.destroy'。 – Chinmay235 2016-05-05 07:21:02

+0

它適合我!,謝謝! – 2016-05-13 06:19:27

43
  1. User.destroy

User.destroy(1)將刪除用戶與發生id == 1:before_destroy:after_destroy回調。例如,如果您有關聯的記錄

has_many :addresses, :dependent => :destroy 

用戶被銷燬後,他的地址也會被銷燬。 如果您使用刪除操作,則不會發生回調。

  • User.destroyUser.delete

  • User.destroy_all(<conditions>)User.delete_all(<conditions>)

  • 通知:用戶是一類與用戶是一個實例對象

    +3

    感謝您解決相關記錄。 – 2012-11-14 15:26:07

    +1

    注意:'User.destroy_all()'運行回調函數,所以在它刪除任何東西之前,它會加載記錄。這是兩個SQL語句不是一個。除了性能影響外,這也具有併發性影響。更安全的呼叫跳過回調; 'User.delete_all()'只會發出一個'DELETE FROM ...'命令。 – 2015-11-11 01:48:38

    50

    delete,delete_all,destroydestroy_all

    的文檔是:older docsRails 3.0.0 docs

    delete不實例化對象,而destroy一樣。通常,deletedestroy快。

    +2

    'delete'速度更快,但會繞過您可能在模型上定義的回調 – Rudi 2015-10-17 19:39:56