在级联删除时覆盖子对象的默认范围

时间:2018-05-16 00:36:52

标签: ruby-on-rails ruby

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

1 个答案:

答案 0 :(得分:1)

我会将其委托给数据库,因为我怀疑您需要对已经被软删除的记录运行回调。此外,它速度更快,而且不占用内存。

新迁移:

add_foreign_key :child_table, :parent_table, on_delete: :cascade

那你就可以做

Parent.find(1).delete