ruby on rails 3 - destroy vs destroy_all



我需要知道什么时候使用:dependent => :destroy_all,什么时候使用:dependent => :destroy

如果我的模型有许多子模型,我使用:dependent => :destroy会发生什么?它只会破坏第一个子模型吗?

这行代码是否错误:

has_many books, :dependent => :destroy

应该是这样的吗?

has_many books, :dependent => :destroy_all

?

这会毁掉所有的书。所有的。

has_many books, :dependent => :destroy

要记住的一件重要的事情是,:dependent => :destroy将导致在每个相关的图书中调用#destroy方法。通过对每个Book调用#destroy,任何before_destroyafter_destroy回调将对每个Book执行。

当然,如果你有很多依赖的书,这个过程可能会很昂贵。

:destroy_all无效,也许您正在考虑:delete_all。与:delete_all(而不仅仅是:destroy)的不同之处在于,Rails将发出一条SQL语句来删除所有相关的图书记录。任何Book记录都不会调用#destroy方法,也不会执行before_destroyafter_destroy回调。

这样做的好处是,单个SQL语句从数据库中删除记录的效率比对每条记录调用#destroy要高很多倍。

知道这一点很重要。如果您在Book模型上有任何*_destroy回调,您应该知道定义:dependent => :delete_all将会忽略您在Book模型上定义的任何回调。

我很确定第一行是正确的,第二行是错误的。

这里是文档中特定部分的链接:

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html method-i-has_many-label-Options

我的理解是:dependent将循环通过关联并调用给定的函数,这意味着:destroy是要调用的正确函数。(:destroy_all只对集合有效)

相关内容

  • 没有找到相关文章

最新更新