级联删除(软和硬删除)ruby

时间:2017-10-18 15:54:39

标签: ruby-on-rails ruby cascade soft-delete

所以这是问题所在: 硬删除很明显,你破坏了父母,孩子应该被销毁。使用dependent: :destroy可以正常工作,当父母被摧毁时,孩子就会被摧毁。

关于软删除的混淆。如果我想软删除用户,为此我想更新用户deleted_at: Time.now中的字段。它被称为软删除但我想在更新deleted_at字段时销毁/ null所有关联/依赖用户。

如果不使用任何宝石,怎么可能。

1 个答案:

答案 0 :(得分:0)

我建议你使用gem来处理所有棘手的情况,这些情况可能无法用你自己的解决方案来解决。

但是如果你不想在你的项目中有一个额外的库,那么你可以使用ActiveRecord回调实现类似的东西。 虽然回调通常被视为不良做法,但在这种情况下,它们可能会有所帮助。

您可以使用before_destroy回调http://api.rubyonrails.org/v5.1/classes/ActiveRecord/Callbacks.html 将在调用模型destroy方法之前触发。 在回调的正文中,您可以删除所有相关数据。

另外,不要忘记在模型定义时覆盖destroy方法,将记录标记为已删除而非实际删除。

相关问题