【发布时间】:2015-10-06 03:32:30
【问题描述】:
我有两个模型,一个存储事件,另一个是日历模型的连接模型。加入模型与远程日历 API 集成,并在创建或删除时通过 API 调用(通过 before_save 和 before_destroy 回调)进行管理。
这在一次删除一个连接模型记录时效果很好,但由于我依赖于::destroy 在我的事件模型中定义的 has_many 关联(我不希望远程日历中的孤立事件),删除单个event 将导致 N api 调用(其中 N 是连接模型记录的数量,假设可能是数千),这很容易导致超时。
理想情况下,我想延迟 CalendarEvent.destroy 调用,但仅限于从删除事件中调用它时。例如:
Event.destroy [对所有 CalendarEvent (join model) 记录调用 delay.destroy] CalendarEvent.destroy [销毁不带延迟作业]
有没有办法通过 has_many 调用来延迟这个?
有没有办法通过依赖传递自定义销毁方法:?
有没有办法在 CalendarEvent.destroy 方法中知道它是否是从依赖的: :destroy 定义中调用的?
【问题讨论】:
-
我会通过 sidekiq 之类的方式启动删除作业。
标签: ruby-on-rails ruby ruby-on-rails-4 activerecord delayed-job