【发布时间】:2013-09-29 17:14:40
【问题描述】:
在我的 Rails 应用程序中。我有我的基本模型 - 用户。有很多与用户相关的对象。
Class User
has_many :contents, dependent: destroy
has_many :messages, dependent: destroy
has_many :ratings, dependent: destroy
has_many :groups, dependent: destroy
...
end
当我想从我的系统中删除用户(销毁用户对象)时,大约需要一分钟来销毁所有关联的对象。处理此类情况的最佳方法是什么?
我想到的一种方法是:
在delayed_job中销毁:
但是直到用户对象在延迟作业中被销毁之前,该用户不应该对其他人可见。通过在用户模型中删除标志而不获取结果来处理这种情况。但我也使用 sphinx,并且需要确保该用户也不会出现在 sphinx 结果中。
有没有更好的方法来处理这种情况?
【问题讨论】:
-
一种选择是先销毁用户,然后将相关对象的销毁委托给延迟作业。
-
您是否考虑过使用
delete而不是destroy? api.rubyonrails.org/classes/ActiveRecord/Associations/… -
@gabrielhilal 是的。但在删除的情况下,观察者回调不会发生,我也必须手动进行。就像破坏用户破坏组一样,组又必须更新计数并删除组中的活动。单独处理它们会使代码有点复杂。但就是这样吗?
标签: ruby-on-rails ruby-on-rails-3