我需要知道何时使用: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
仅对收藏有效。)
我希望这会有所帮助。