cascade delete(软删除和硬删除)ruby

wsewodh2  于 5个月前  发布在  Ruby
关注(0)|答案(1)|浏览(70)

问题就在这里:硬删除是很明显的,你摧毁了父和孩子应该得到销毁。使用dependent: :destroy它的工作正常,当任何父得到销毁的孩子得到销毁。
关于混淆软删除.如果我想软删除用户,我想更新用户deleted_at: Time.now中的字段.它被称为软删除,但我想销毁/空所有的关联/依赖的用户时,我更新deleted_at字段.
怎么可能不使用宝石。

e4yzc0pl

e4yzc0pl1#

我建议你使用gem,这将处理所有棘手的情况下,可以不覆盖自己的解决方案.
但是如果你不想在你的项目中有一个额外的库,那么你可以使用ActiveRecord回调来实现类似的东西。虽然回调通常被认为是不好的做法,但在这种情况下,它们会很有帮助。
您可以使用before_destroy回调http://api.rubyonrails.org/v5.1/classes/ActiveRecord/Callbacks.html,它将在调用模型destroy方法之前触发。在回调的主体中,您可以删除所有相关数据。
另外,不要忘记在模型定义时覆盖destroy方法,将记录标记为已删除,而不是真实的删除。

相关问题