我想运行 Alarm.destroy_all
,但是,每个警报都与许多 AlarmEvent
相关联,每个 AlarmEvent
都与许多 AlarmEvent::Measurement
相关联,这两个关联都标记为 :dependent=>destroy
所以,当我调用 Alarm.destroy all 时,这个调用需要很长时间才能运行。有什么办法可以让它更快吗?如何?
到目前为止,我已经尝试过 Alarm.joins(:alarm_events).destroy_all
,但它仍然很慢。
最佳答案
destroy_all
的更快替代方案是 delete_all
但这不会追踪和破坏任何依赖项,也不会触发任何 before_destroy
或 after_destroy
Hook 。
如果你真的很关心速度,你可能会考虑到这一点来重写这个。你甚至可以把它总结为一系列条件:
Alarm.delete_all(:id => alarm_ids)
AlarmEvent.delete_all(:alarm_id => alarm_ids)