2

我有一个has_one公司的模型用户。公司可以有许多税收和额外的费用。我正在使用ActiveRecord :: Observer记录用户在管理员的公司数据上完成的任何活动。为此,我正在观察用户,公司,税务和AdditionalFee模型。对于用户在这些模型中对属性所做的任何更改,我都会通过在另一个ActivityLog模型中创建记录来记录这些活动。 我的模型之间的关联是 -如何防止ActiveRecord :: Observer记录删除从属记录,如果父记录被删除?

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模型中创建新条目,但只想记录销毁的父记录(公司或用户)。

回答

1

如果是CompanyUser,您可以检查obj对象类型,您可以继续并创建ActivityLog

def after_destroy(obj) 
    case obj 
    when Company, User then create_activity_log! 
    end 
end