gpt4 book ai didi

ruby - 如果父记录被销毁,如何防止 ActiveRecord::Observer 记录依赖记录的删除?

转载 作者:太空宇宙 更新时间:2023-11-03 16:28:01 24 4
gpt4 key购买 nike

我有一个拥有一家公司的模型用户。一个公司可以有很多税和附加费。我正在使用 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 模型中为销毁的相关记录创建新条目,但只想记录销毁的父记录(公司或用户)。

最佳答案

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

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

关于ruby - 如果父记录被销毁,如何防止 ActiveRecord::Observer 记录依赖记录的删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21280576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com