我有一个带有以下型号的rails 3.2.8 app:Profile和Report。配置文件有许多报告,报告属于配置文件
如果我尝试删除所有特定配置文件的报告:
Profile.first.reports.delete_all
它不是删除报告,而是使用类似于:
的SQL将其profile_id设置为nilUPDATE `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实际上并不删除,而是执行依赖项中指定的内容。
除非我遗漏了某些内容,否则此行为无法记录,但至少它现在可以正常运作。
答案 0 :(得分:3)
如果您已定义配置文件和报告之间的关联,那么您的代码应该可以正常工作,您可以尝试
Report.where(:profile_id => Profile.first.id).delete_all
答案 1 :(得分:0)
我对它进行了一些测试,但它适用于您的情况:
Report.delete_all(profile_id: Profile.first.id)