Papertrail 曲目通过关联创建但不删除



我有一个行业表,并正在跟踪它的竞争对手,这些竞争对手也是行业。这是通过具有industry_id和competitor_id的映射表industry_competitors实现的。我希望通过书面记录来跟踪行业竞争对手的关联和分离。

class Industry < ApplicationRecord
has_many :industry_competitors, dependent: :destroy
has_many :competitors, through: :industry_competitors
end

class IndustryCompetitor < ApplicationRecord
has_paper_trail
belongs_to :industry
belongs_to :competitor, class_name: "Industry"
end

我的控制器代码就是这样。

competitors = ::Industry.where(id: params[:competitor_ids])
@industry.competitors = competitors
@industry.save

每次通过整个竞争对手列表时。如果我尝试将一些竞争对手(通过不将 id 传递给控制器(与行业解除关联,则会触发"删除"查询。

DELETE FROM `industry_competitors` WHERE `industry_competitors`.`industry_id` = 4559 AND `industry_competitors`.`competitor_id` = 4564

我怀疑是因为 activerecord 调用"删除"而不是"销毁"此 papertrail 回调不会触发,因此不会跟踪更改。 如果有办法显式调用删除(只需最少的代码更改(。或者有没有办法让书面记录跟踪删除?

添加此补丁可以使其正常工作。

module HasManyThroughAssociationPatch
def delete_records(records, method)
method ||= :destroy
super
end
end
ActiveRecord::Associations::HasManyThroughAssociation.prepend(HasManyThroughAssociationPatch)

学分:https://github.com/westonganger/paper_trail-association_tracking

最新更新