2

我有四个模型:

class Order < WebDatabase
    has_many :shipments

class Shipment < WebDatabase
    belongs_to :order
    has_many :line_items, :order => "id", :dependent => :destroy

class LineItem < WebDatabase
    belongs_to :shipment
    has_many :line_item_messages, :dependent => :destroy

class LineItemMessage < WebDatabase
    belongs_to :line_item

因此,如果我这样做了,是否会因为每个模型上的 :dependent => :destroy 而在被破坏和被@order.shipments.destroy_all破坏的地方出现一连串的破坏?@order.shipments.line_items@order.shipments.line_items.line_item_messages

4

1 回答 1

5

是的。

来自文档(重点是我自己的)

destroy_all(条件=无)

上市

通过实例化每条记录并调用其destroy方法来销毁匹配条件的记录。执行每个对象的回调(包括:依赖关联选项和 before_destroy/after_destroy Observer 方法)。返回被销毁的对象的集合;每个都将被冻结,以反映不应进行任何更改(因为它们无法持久化)。

注意:当您一次删除多条记录时,每条记录的实例化、回调执行和删除可能会很耗时。它为每条记录生成至少一个 SQL DELETE 查询(或者可能更多,以强制执行您的回调)。如果您想快速删除许多行,而不关心它们的关联或回调,请改用 delete_all。

于 2013-10-07T18:54:16.137 回答