class Parent
has_many :children, dependent: :destroy
end
class Child
belongs_to :parent
default_scope { where(deleted_at: nil).not_deleted }
end
我的问题来自于一些Child对象被软删除。调用Parent.last.destroy将尝试仅销毁默认范围内的那些子项。
是的,我知道如何做Child.last.unscoped
之类的事情,但我希望像Parent.find(1).destroy
这样的东西来销毁所有子对象,包括那些被软删除的对象。
Parent.find(1).children.unscoped.destroy_all
Parent.destroy
以上作品。有没有办法将其归结为Parent.find(1).destroy
?
答案 0 :(得分:1)
我会将其委托给数据库,因为我怀疑您需要对已经被软删除的记录运行回调。此外,它速度更快,而且不占用内存。
新迁移:
add_foreign_key :child_table, :parent_table, on_delete: :cascade
那你就可以做
Parent.find(1).delete