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