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

问题描述 投票:1回答:1

我的项目中有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

提前致谢!

ruby-on-rails database model-view-controller model associations
1个回答
1
投票

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

查看文档here

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

This线程有更好的答案。

© www.soinside.com 2019 - 2024. All rights reserved.