我正在尋找從表中刪除記錄的最佳方法。例如,我有一個用戶的用戶ID跨越很多表。我想刪除此用戶以及所有表中具有其ID的每個記錄。delete_all vs destroy_all?
u = User.find_by_name('JohnBoy')
u.usage_indexes.destroy_all
u.sources.destroy_all
u.user_stats.destroy_all
u.delete
這個工作,並刪除所有表的用戶的所有引用,但我聽說destroy_all
是非常沉重的過程,所以我嘗試delete_all
。它只將用戶從他自己的用戶表中刪除,並且所有其他表中的id
都被設爲空,但保留其中的記錄。有人可以分享執行此類任務的正確流程嗎?
我看到destroy_all
調用所有關聯對象的destroy
函數,但我只是想確認正確的方法。
還應該注意的是:1)使用'delete_all'時不調用回調函數,2)'destroy_all'實例化所有記錄並一次銷燬一個記錄,所以對於一個非常大的數據集,會痛苦地慢。 –
假設我在模型中運行before_destroy方法 - 如果我使用delete_all,那麼此方法將不會運行?其次,如果我在我的模型中使用before_delete方法,當我在rails控制檯中運行delete或delete_all時,會運行嗎? – BKSpurgeon