我有一个模型用户has_one公司。公司可以有很多税和附加费。我正在使用ActiveRecord :: Observer记录用户在其公司数据上为管理员执行的任何活动。为此,我正在观察用户,公司,税务和AdditionalFee模型。对于用户对这些模型中的属性所做的任何更改,我通过在另一个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模型中为已销毁的相关记录创建一个新条目,但只想记录被销毁的父记录(公司或用户)。
答案 0 :(得分:1)
您可以检查obj
对象类型({1}}或Company
是否可以继续创建User
。
ActivityLog