我有四种模式:
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
因此,如果我@order.shipments.destroy_all
,那么会有一系列破坏,其中@order.shipments.line_items
被销毁,而@order.shipments.line_items.line_item_messages
也会被销毁,因为:dependent =&gt; :破坏每个型号?
答案 0 :(得分:2)
是
来自docs的(强调是我自己的)
destroy_all(conditions = nil)
公共
通过实例化每条记录并调用其destroy方法来销毁记录匹配条件。执行每个对象的回调(包括:依赖关联选项和before_destroy / after_destroy Observer方法)。返回被销毁的对象集合;每个都将被冻结,以反映不应该做出任何改变(因为它们不能被保留)。
注意:当您一次删除多条记录时,实例化,回调执行和删除每条记录都会非常耗时。它为每条记录生成至少一个SQL DELETE查询(或可能更多,以强制执行您的回调)。如果要快速删除多行,而不关心它们的关联或回调,请改用delete_all。