我想运行 Alarm.destroy_all ,但是,每个警报都与许多 AlarmEvent 相关联,每个 AlarmEvent 都与许多 AlarmEvent::Measurement 相关联,这两个关联都标记为 :dependent=>destroy
所以,当我调用 Alarm.destroy all 时,这个调用需要很长时间才能运行。有什么办法可以让它更快吗?如何?

到目前为止,我已经尝试过 Alarm.joins(:alarm_events).destroy_all,但它仍然很慢。

最佳答案

destroy_all 的更快替代方案是 delete_all 但这不会追踪和破坏任何依赖项,也不会触发任何 before_destroyafter_destroy Hook 。

如果你真的很关心速度,你可能会考虑到这一点来重写这个。你甚至可以把它总结为一系列条件:

Alarm.delete_all(:id => alarm_ids)
AlarmEvent.delete_all(:alarm_id => alarm_ids)

10-06 15:05