我有四个模型:
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
Run Code Online (Sandbox Code Playgroud)
因此,如果我这样做了@order.shipments.destroy_all,是否会因为每个模型上的 :dependent => :destroy而@order.shipments.line_items被破坏和@order.shipments.line_items.line_item_messages被破坏的破坏链?
是的。
来自文档(重点是我自己的)
destroy_all(条件 = 零)
民众
通过实例化每条记录并调用其销毁方法来销毁符合条件的记录。执行每个对象的回调(包括 :dependent 关联选项和 before_destroy/after_destroy Observer 方法)。返回被销毁对象的集合;每个都将被冻结,以反映不应进行任何更改(因为它们无法持久化)。
注意:当您一次删除许多记录时,每条记录的实例化、回调执行和删除可能会非常耗时。它为每条记录至少生成一个 SQL DELETE 查询(或可能更多,以强制执行您的回调)。如果您想快速删除许多行,而不考虑它们的关联或回调,请改用 delete_all。
| 归档时间: |
|
| 查看次数: |
967 次 |
| 最近记录: |