审计与 Rails Audited gem 的深度关联

Posted

技术标签:

【中文标题】审计与 Rails Audited gem 的深度关联【英文标题】:Audit deep associations with Rails Audited gem 【发布时间】:2017-05-09 07:04:42 【问题描述】:

我有接下来的三个模型:

class School < ActiveRecord::Base
  audited
  has_associated_audits

  has_many :subjects, dependent: :destroy
end

class Subject < ActiveRecord::Base
  audited associated_with: :school
  has_associated_audits

  has_many :attachments, as: :attachable, dependent: :destroy
end

class Attachment < ActiveRecord::Base
  audited associated_with: :attachable
  belongs_to :attachable, polymorphic: true
end

基本上,一个school 有很多subjects,每个subject 有很多attachmentsattachment 模型是多态的,因为它也用于其他模型,以防万一它很重要......)

问题是审核没有按我的预期工作。我创建了一所学校,然后为该学校创建了一个主题,然后我为该主题添加了附件。这是我从控制台得到的:

School.last.associated_audits # => returns only changes on Subjects, not on subject's attachments.
Subject.last.associated_audits # => returns only changes associated to its attachments

但我需要School.last.associated_audits 来包含附件审核的更改。

有什么想法吗?

【问题讨论】:

正如您所说,它没有按您的预期工作。这并不是说它不起作用。您要解决的问题是什么?您是否尝试同时显示所有 SchoolSubjectAttachment 审核? @Tass 没错,我想一起显示。 【参考方案1】:

虽然您无法从深度关联中检索审核,但您可以将审核分组在一起。例如:

school = School.find(params[:id])
audits = school.audits + school.associated_audits
school.subjects.each  |subject| audits += subject.associated_audits 

我相信这应该为您提供SchoolSubjectAttachments 的整个审计集合。这就是你所追求的吗?

【讨论】:

【参考方案2】:

审核的 gem 现在有一个辅助方法:

您可以一次性访问记录自己的审核和相关审核:

company.own_and_associated_audits

【讨论】:

以上是关于审计与 Rails Audited gem 的深度关联的主要内容,如果未能解决你的问题,请参考以下文章

使用 Audited gem 在 Rails 5.2 应用程序中在哪里列出未审核的列?

如何在我的 Rails 控制台中查看 Rails 审计记录?

不适用于经过审核的 4.7 gem 更新模型

Rails 5 - 使用 Audited gem 查看更改

如何在 Rails 中调试 gem?

ActionController::InvalidAuthenticityToken Rails 5 / 设计 / 审核 / PaperTrail gem