2017-10-18 92 views
0

所以这里的问题是: 硬删除是很明显的,你破坏了家长和孩子应该被摧毁。并使用dependent: :destroy因为它工作正常,当父母被摧毁时,孩子会被摧毁。级联删除(软,硬删除)红宝石

约搞不清约软删除。如果我想软删除用户,并为此我想更新用户deleted_at: Time.now中的字段。其称为软删除,但我想销毁/ null当我更新deleted_at字段的用户的所有关联/依赖。

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

+1

使用宝石有什么问题?这是一个不平凡的问题,但[paranoia](https://github.com/rubysherpas/paranoia)库是一个广泛使用和全面的解决方案。 –

+1

我见过很多有缺陷的尝试来重新发明我的职业生涯中的这个轮子;我的建议是只使用一个库! –

回答

0

我会建议你使用宝石,这将处理所有棘手的情况下,可以不包含您自己的解决方案。

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

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

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