【发布时间】:2014-02-12 08:55:45
【问题描述】:
我有一个模型用户 has_one 公司。一家公司可以有许多税费和附加费。我正在使用 ActiveRecord::Observer 为管理员记录用户对其公司数据所做的任何活动。为此,我正在观察用户、公司、税收和附加费模型。对于用户对这些模型中的属性所做的任何更改,我通过在另一个 ActivityLog 模型中创建记录来记录这些活动。 我的模型之间的关联是 -
class User < ActiveRecord::Base
has_one: :company, dependent: :destroy
class Company < ActiveRecord::Base
belongs_to: :user
has_many: :taxes, dependent: :destroy
has_many: :additional_fees, dependent: :destroy
class Tax < ActiveRecord::Base
belongs_to: :company
class AdditionalFee < ActiveRecord::Base
belongs_to: :company
我的观察者如下:
class ActivityObserver < ActiveRecord::Observer
observe :user, :company, :tax, :additional_fee
我面临的问题是用户或公司被删除时。 我在观察者的 after_destroy 回调中的 AcitivityLog 模型中创建了一条记录。
def after_destroy(obj)
ActivityLog.create(performer: 'user_name_here', target: 'record_destroyed(serialised object)', action: "destroy", description: "#user_name_here has deleted their company #company_name_here", change: "lot_variant")
end
我以这种方式在 ActivityLog 中为观察模型中被删除的每条记录创建一条记录。
因为观察者正在观察所有关联模型,所以当用户或公司被删除时,它会为每个关联记录创建一个新条目。
有没有办法在父节点被销毁时不阻止观察者记录依赖的销毁记录?我不希望在 ActivityLog 模型中为已销毁的依赖记录创建新条目,但只想为已销毁的父记录(公司或用户)进行记录。
【问题讨论】:
标签: ruby activerecord ruby-on-rails-3.2 callback observer-pattern