Rails delete_all没有删除

时间:2013-11-20 11:38:48

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我有一个带有以下型号的rails 3.2.8 app:Profile和Report。配置文件有许多报告,报告属于配置文件

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

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可以正常工作,就像在单一报告中使用destroy和delete一样。

编辑(因为我无法回答我自己的问题):

更改个人资料的关系:

has_many :reports

为:

has_many :reports, dependent: :delete_all

已修复此问题,我猜你是否指定依赖,它默认为:nullify,并且调用Profile.first.reports.delete_all实际上并不删除,而是执行依赖项中指定的内容。

除非我遗漏了某些内容,否则此行为无法记录,但至少它现在可以正常运作。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

我对它进行了一些测试,但它适用于您的情况:

Report.delete_all(profile_id: Profile.first.id)