所以这是问题所在:
硬删除很明显,你破坏了父母,孩子应该被销毁。使用dependent: :destroy
可以正常工作,当父母被摧毁时,孩子就会被摧毁。
关于软删除的混淆。如果我想软删除用户,为此我想更新用户deleted_at: Time.now
中的字段。它被称为软删除但我想在更新deleted_at字段时销毁/ null所有关联/依赖用户。
如果不使用任何宝石,怎么可能。
答案 0 :(得分:0)
我建议你使用gem来处理所有棘手的情况,这些情况可能无法用你自己的解决方案来解决。
但是如果你不想在你的项目中有一个额外的库,那么你可以使用ActiveRecord回调实现类似的东西。 虽然回调通常被视为不良做法,但在这种情况下,它们可能会有所帮助。
您可以使用before_destroy
回调http://api.rubyonrails.org/v5.1/classes/ActiveRecord/Callbacks.html
将在调用模型destroy
方法之前触发。
在回调的正文中,您可以删除所有相关数据。
另外,不要忘记在模型定义时覆盖destroy
方法,将记录标记为已删除而非实际删除。