硬删除在rails中启用软删除的关联记录

Posted

技术标签:

【中文标题】硬删除在rails中启用软删除的关联记录【英文标题】:Hard delete the associated records for which soft delete is enabled in rails 【发布时间】:2019-08-07 20:48:33 【问题描述】:

我有一个用户模型,并且没有为用户模型启用软删除。对于一个它的关联模型(has_many 关联)说帖子,启用了软删除。我想要的是在删除用户时硬删除所有相关的帖子。

在 User.rb 中

has_many :posts, dependent: :destroy

这只是软删除关联的记录。所以删除用户时会引发异常。是否有任何选项可以硬删除模型级别的关联记录?或者必须在 before_destroy 回调中做一些事情来实现这一点?

注意:已使用 paranoia gem 进行软删除

【问题讨论】:

【参考方案1】:

如果你想硬删除相关的帖子,你可以使用dependent: :delete_all。这将直接进入数据库删除记录并绕过paranoia gem注册的before_destroy回调。

【讨论】:

抱歉,我们正在使用acts_as_paranoid gem。宝石没有这种行为。在这种情况下我是否必须使用before_destroy 回调?我检查了似乎没有这个选项的acts_as_paranoid gem。 acts_as_paranoid 也应该与:delete_all 一起使用。我刚刚检查了the source,它并没有摆弄delete_all,除非确保默认范围没有妨碍。你有什么错误信息吗?

以上是关于硬删除在rails中启用软删除的关联记录的主要内容,如果未能解决你的问题,请参考以下文章

Rails - 允许人们在记录之间添加关联,但只允许管理员删除它

Linux命令学习记录

如何在 Rails 应用程序中克隆表并保持结构同步?

如何在Rails 5中删除模型时删除模型的所有关联

如何正确销毁 ruby​​ on rails 中的关联记录?

与Ruby on Rails中的范围相关联