我需要知道何时使用:dependent => :destroy_all以及何时使用:dependent => :destroy
如果我的模型 has_many 子模型并且我使用了会发生:dependent => :destroy什么?它只会破坏第一个子模型吗?
这行代码错了吗:
has_many books, :dependent => :destroy
会是这样吗:
has_many books, :dependent => :destroy_all
?
我需要知道何时使用:dependent => :destroy_all以及何时使用:dependent => :destroy
如果我的模型 has_many 子模型并且我使用了会发生:dependent => :destroy什么?它只会破坏第一个子模型吗?
这行代码错了吗:
has_many books, :dependent => :destroy
会是这样吗:
has_many books, :dependent => :destroy_all
?
这会毁掉所有的书。他们全部。
has_many books, :dependent => :destroy
要记住的重要一点是,这:dependent => :destroy将导致#destroy在每一本关联的书中调用该方法。通过调用每本书,将为每本书执行#destroy任何before_destroy或回调。after_destroy
自然,如果您有很多相关书籍,则此过程可能会很昂贵。
无效,也许你在:destroy_all想:delete_all. 与:delete_all( 而不是:destroy) 的不同之处在于 Rails 将发出一条 SQL 语句来删除所有相关的书籍记录。不会#destroy对任何 Book 记录调用任何方法,并且不会执行before_destroy或after_destroy回调。
好处是单个 SQL 语句从数据库中删除记录的效率比调用#destroy每条记录的效率高很多倍。
了解这一点非常重要。如果您*_destroy在 Book 模型上有任何回调,您应该知道定义:dependent => :delete_all将具有忽略您在 Book 模型上定义的任何回调的效果。
我很确定第一行是正确的,第二行是不正确的。
这是文档中特定部分的链接:
我的理解是,:dependent它将遍历关联并调用给定的函数,这意味着要调用的函数:destroy是正确的。(:destroy_all仅对收藏有效。)
我希望这会有所帮助。