gpt4 book ai didi

ruby-on-rails - Rails delete_all 没有删除

转载 作者:行者123 更新时间:2023-12-01 02:21:32 25 4
gpt4 key购买 nike

我有一个带有以下模型的 rails 3.2.8 应用程序:配置文件和报告。 Profile 有很多 Reports,其中的 Reports 属于一个 Profile

如果我尝试删除特定配置文件的所有报告:

Profile.first.reports.delete_all

它没有删除报告,而是使用类似于以下内容的 SQL 将它们的 profile_id 设置为 nil:
UPDATE `reports` SET `profile_id` = NULL WHERE `reports`.`profile_id` = 1 AND `reports`.`id` IN (1, 3)

我在指南中找不到任何关于此的信息,这是正确的行为吗?如果不是什么会导致它?

值得注意的是,使用 destroy_all 可以正常工作,就像在单个 Report 上使用 destroy 和 delete 一样。

编辑 (因为我还不能回答我自己的问题):

从以下位置更改配置文件的关系:
has_many :reports

到:
has_many :reports, dependent: :delete_all

已经解决了这个问题,我猜如果你没有指定依赖,它默认为:nullify,并且调用 Profile.first.reports.delete_all 并没有真正删除,而是执行依赖中指定的操作。

除非我遗漏了一些东西,否则这种行为是没有记录的,但至少它现在按我的预期工作。

最佳答案

如果您已经定义了配置文件和报告之间的关联,那么您的代码应该可以工作,否则您可以尝试

Report.where(:profile_id => Profile.first.id).delete_all

关于ruby-on-rails - Rails delete_all 没有删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20094906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com