3 回答

TA貢獻1852條經驗 獲得超7個贊
區別在于回調。
將:delete_all直接在您的應用程序,并通過SQL刪除:
DELETE * FROM users where compagny_id = XXXX
使用:destroy,您所有孩子的實例化。因此,如果您無法銷毀它,或者每個銷毀了自己的:dependent,則可以調用其回調。

TA貢獻1725條經驗 獲得超8個贊
在Rails的模型關聯上,您可以指定:dependent
選項,該選項可以采用以下三種形式之一:
:destroy/:destroy_all
通過調用它們的destroy
方法,關聯的對象與該對象一起被銷毀:delete/:delete_all
所有關聯的對象將立即銷毀,而無需調用其:destroy
方法:nullify
所有關聯對象的外鍵都設置為NULL
不調用其save
回調

TA貢獻1827條經驗 獲得超4個贊
請參閱destroy刪除其關聯元素 ,其中delete_all可以從self表中刪除多個數據,如下所示:DELETE * FROM table where field = 'xyz'
:取決于可能的選項:
控制銷毀所有者時關聯對象發生的情況。注意,這些被實現為回調,并且Rails按順序執行回調。因此,其他類似的回調可能會影響:depend行為,并且該:dependent
行為可能會影響其他回調。
:destroy
導致所有關聯的對象也被破壞。
:delete_all
使所有關聯的對象直接從數據庫中刪除(因此將不執行回調)。
:nullify
導致將外鍵設置為NULL。不執行回調。
:restrict_with_exception
如果存在任何關聯的記錄,則會引發異常。
:restrict_with_error
如果存在任何關聯的對象,則會導致將錯誤添加到所有者。
如果與:through
選項一起使用,則聯接模型上的關聯必須是一個Emirates_to,并且被刪除的記錄是聯接記錄,而不是關聯的記錄。
- 3 回答
- 0 關注
- 632 瀏覽
添加回答
舉報