在销毁ActiveRecord对象时处理循环关联

时间:2016-03-29 19:37:48

标签: ruby-on-rails ruby-on-rails-4 activerecord

我有一些Rails 4 ActiveRecord模型,其组织如下

enter image description here

假设一切都是has_many关系,并设置为dependent: :destroy

  • User有许多Items
  • Item有许多Tags
  • Tag有许多Foos
  • User有许多Foos

当我删除特定的User记录时,它会正确启动销毁链并删除关联的ItemTagFoo记录。

但它也会尝试直接销毁Foo

这里会有竞争条件吗?是否会出错,具体取决于哪个模型“首先”。 UserTag中的任何一个在尝试运行DELETE语句时都会看到已删除的记录。

如果是这样,我该如何防止这种情况?

谢谢!

1 个答案:

答案 0 :(得分:0)

你不应该在“User have many Foos”关系中使用“destroy”参数。

“Foo”必须使用“User.destroy_all”通过“Tag”销毁。