我有两个模型。用belongs_to :model_two
进行模型一,用has_one :model_one
进行模型二。他们都有dependent: :destroy
[当我尝试self.model_one = nil
时,它将进入无限循环。
SystemStackError:
stack level too deep
如果将模型一中的关联更改为dependent: :delete
,它可以正常工作,但是很可能通过在数据库中直接删除而跳过模型中的某些挂钩。
如何使用dependent: :destroy
而不引起循环?
在Rails 4中是不可能的。基于这个原因,您不能在关联的两侧使用dependent: :destroy
,因为它会导致无限循环。
Bi-directional dependent: :destroy
support是在Rails 5中添加的,如果需要此功能,最好的选择是升级应用程序,因为它没有被反向移植。
您不必在两个模型上都运行dependent: :destroy
。在具有dependent: :destroy
的模型上运行就足够了。
Ex:
has_many :model_one
上面的代码说,当删除特定用户时,还要删除该用户创建的所有文章。就这样。
您的代码正在做什么,当删除用户时,删除该用户删除的所有文章,然后再次跳转到删除该用户,依此类推。