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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Rails 5中删除模型时删除模型的所有关联相关的知识,希望对你有一定的参考价值。

我的项目中有3个模型。用户,膳食和食物。用户有很多餐。一顿饭可以有许多食物,食物可以是许多餐的一部分。用户和用餐模型处于has_many关联中,而用餐和食物模型处于has_many:通过关联。用餐和食物模型的连接模型称为MealFood。

删除用户时,我已将其删除,以便删除属于该用户的所有餐食。但是我无法做到这一点,它也删除了属于用户的膳食的所有关联。

我需要删除meal_foods表中的每条记录,其中meal_id属于正在删除的用户。

用户模型

class User < ApplicationRecord
    has_many :meals, :dependent => :delete_all
end

膳食模型

class Meal < ApplicationRecord
    belongs_to :user, optional: true
    has_many :meal_foods, :dependent => :delete_all
    has_many :foods, through: :meal_foods
end

食物模型

class Food < ApplicationRecord
    has_many :meal_foods
    has_many :meals, through: :meal_foods
end

膳食食品模型

class MealFood < ApplicationRecord
  belongs_to :meal
  belongs_to :food
end

提前致谢!

答案

你可能想要dependent: :destroy,而不是dependent: :delete_all:delete_all不会进行回调,这可能是为什么你的更深层次的联想仍然存在的原因。

查看文档here

对于has_manydestroydestroy_all将始终调用正在删除的记录的destroy方法,以便运行回调。然而,deletedelete_all将根据:dependent选项指定的策略进行删除,或者如果没有给出:dependent选项,那么它将遵循默认策略。默认策略是不执行任何操作(将外键保留为父ID),但has_many :through除外,其中默认策略为delete_all(删除连接记录,不运行其回调)。

This线程有更好的答案。

以上是关于如何在Rails 5中删除模型时删除模型的所有关联的主要内容,如果未能解决你的问题,请参考以下文章

如何在has_many中获取模型的属性:通过Rails 5中的关联

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

如何从rails中删除设计模型?

Ruby On Rails 5,activerecord query其中模型关联id包括数组中的所有id

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

在 Rails 3 中删除表和删除模型的最佳方法是啥?