Mongoid依赖:destroy vs:delete

Mat*_*zzi 13 ruby-on-rails mongoid

当使用Mongoid引用的关联时,依赖的detroy和依赖删除之间的差异是什么,因为在它讲述的文档中:

:delete: Delete the child documents.
:destroy: Destroy the child documents.
Run Code Online (Sandbox Code Playgroud)

Jef*_*ith 26

在Mongoid(我相信也是ActiveRecord)中,delete只需从数据库中删除对象. destroy将删除该对象并运行该模型已定义的所有相应回调.因此,如果您before_destroy在模型上有回调并且您delete是该模型的实例,before_destroy则不会调用回调.

因此dependent: :destroy,在删除时运行模型的回调,而dependent: :delete不是.

  • 不,即使你没有回调,它们也不是一回事.因为`destroy`依赖于回调,所以它必须加载相关文档才能执行回调,并执行DELETE查询.`delete`只是进行DELETE查询.然后,销毁是"更安全",但删除是"更快" (3认同)
  • 是的,我可能会考虑使用`destroy`.如果您确实添加了回调,则需要记住将其从`delete`更改为`destroy`,除非您不希望回调实际运行. (2认同)