Mongoid依赖:destroy vs:delete

时间:2012-03-31 14:05:16

标签: ruby-on-rails mongoid

当使用Mongoid引用关系时,依赖销毁和依赖删除之间的区别是什么,因为它在文档中告诉:

:delete: Delete the child documents.
:destroy: Destroy the child documents.

2 个答案:

答案 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只进行一次查询。