如何在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_many
,destroy
和destroy_all
将始终调用正在删除的记录的destroy方法,以便运行回调。然而,delete
和delete_all
将根据:dependent
选项指定的策略进行删除,或者如果没有给出:dependent
选项,那么它将遵循默认策略。默认策略是不执行任何操作(将外键保留为父ID),但has_many :through
除外,其中默认策略为delete_all
(删除连接记录,不运行其回调)。
This线程有更好的答案。
以上是关于如何在Rails 5中删除模型时删除模型的所有关联的主要内容,如果未能解决你的问题,请参考以下文章
如何在has_many中获取模型的属性:通过Rails 5中的关联
如何正确销毁 ruby on rails 中的关联记录?
Ruby On Rails 5,activerecord query其中模型关联id包括数组中的所有id