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