当使用Mongoid引用关系时,依赖销毁和依赖删除之间的区别是什么,因为它在文档中告诉:
:delete: Delete the child documents.
:destroy: Destroy the child documents.
答案 0 :(得分:25)
在Mongoid(我相信也是ActiveRecord)中,delete
只是从数据库中删除了对象。 destroy
将删除对象并运行模型已定义的所有相应回调。因此,如果您对模型进行before_destroy
回调,并delete
该模型的实例,则不会调用before_destroy
回调。
因此dependent: :destroy
在删除时会运行模型的回调,而dependent: :delete
则不会。
答案 1 :(得分:3)
destroy
运行模型回调,然后向数据库发出REMOVE查询。delete
只是向数据库发出REMOVE查询。这些名字取自ActiveRecord
,这就是为什么它们与mongo不匹配的原因。
您可以将delete
视为优于destroy
的优化。使用destroy
时,确保执行before_destroy
回调,以便进行适当的清理。另一方面,如果您执行Model.destroy_all
之类的操作,则必须加载所有元素,然后对每个元素进行REMOVE查询,无论Model.delete_all
只进行一次查询。