ActiveRecord:destroy_all是否为相关记录执行回调?

时间:2013-10-07 18:50:42

标签: activerecord

我有四种模式:

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; :破坏每个型号?

1 个答案:

答案 0 :(得分:2)

来自docs

(强调是我自己的)

  

destroy_all(conditions = nil)

     

公共

     

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

     

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