我有一个拥有一家公司的模型用户。一个公司可以有很多税和附加费。我正在使用 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
对象类型,如果它是 Company
或 User
您可以继续创建 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/