Mat*_*man 6 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2
我有一个带有以下模型的 rails 3.2.8 应用程序:配置文件和报告。Profile 有很多 Reports,其中的 Reports 属于一个 Profile
如果我尝试删除特定配置文件的所有报告:
Profile.first.reports.delete_all
Run Code Online (Sandbox Code Playgroud)
它没有删除报告,而是使用类似于以下内容的 SQL 将它们的 profile_id 设置为 nil:
UPDATE `reports` SET `profile_id` = NULL WHERE `reports`.`profile_id` = 1 AND `reports`.`id` IN (1, 3)
Run Code Online (Sandbox Code Playgroud)
我在指南中找不到任何关于此的信息,这是正确的行为吗?如果不是什么会导致它?
值得注意的是,使用 destroy_all 可以正常工作,就像在单个 Report 上使用 destroy 和 delete 一样。
编辑(因为我还不能回答我自己的问题):
从以下位置更改配置文件的关系:
has_many :reports
Run Code Online (Sandbox Code Playgroud)
到:
has_many :reports, dependent: :delete_all
Run Code Online (Sandbox Code Playgroud)
已经解决了这个问题,我猜如果你没有指定依赖,它默认为:nullify,并且调用 Profile.first.reports.delete_all 并没有真正删除,而是执行依赖中指定的操作。
除非我遗漏了一些东西,否则这种行为是没有记录的,但至少它现在按我的预期工作。
小智 0
我已经对其进行了一些测试,但它应该适用于您的情况:
Report.delete_all(profile_id: Profile.first.id)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
941 次 |
| 最近记录: |