【发布时间】:2013-12-04 09:13:48
【问题描述】:
我有一个带有以下模型的 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.id).destroy_all ?
标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2