所以问题来了:硬删除是很明显的,你销毁了父级,而子级也应该被销毁。使用dependent: :destroy
可以很好地工作,当任何一个父进程被销毁时,子进程也会被销毁。
关于软删除的混淆。如果我想软删除用户,并且为此我想更新用户deleted_at: Time.now
中的一个字段。这叫做软删除,但是当我更新deleted_at字段时,我想销毁/null用户的所有关联/依赖项。
不使用任何gem怎么可能。
发布于 2017-10-19 03:08:47
我建议您使用gem,它将处理所有棘手的情况,而您自己的解决方案无法涵盖这些情况。
但是如果你不想在你的项目中有一个额外的库,那么你可以使用ActiveRecord回调来实现类似的东西。尽管回调通常被视为糟糕的实践,但在这种情况下,它们可能会有所帮助。
您可以使用在调用models destroy
方法之前触发的before_destroy
回调http://api.rubyonrails.org/v5.1/classes/ActiveRecord/Callbacks.html。在回调的主体中,你可以删除所有相关的数据。
此外,不要忘记在模型定义中覆盖destroy
方法,将记录标记为已移除而不是真正的删除。
https://stackoverflow.com/questions/46814361
复制相似问题