如果父记录被销毁,如何防止ActiveRecord :: Observer记录相关记录的删除?

时间:2014-01-22 10:40:17

标签: ruby activerecord ruby-on-rails-3.2 callback observer-pattern

我有一个模型用户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模型中为已销毁的相关记录创建一个新条目,但只想记录被销毁的父记录(公司或用户)。

1 个答案:

答案 0 :(得分:1)

您可以检查obj对象类型({1}}或Company是否可以继续创建User

ActivityLog