审计与 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
有很多attachments
(attachment
模型是多态的,因为它也用于其他模型,以防万一它很重要......)
问题是审核没有按我的预期工作。我创建了一所学校,然后为该学校创建了一个主题,然后我为该主题添加了附件。这是我从控制台得到的:
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
来包含附件审核的更改。
有什么想法吗?
【问题讨论】:
正如您所说,它没有按您的预期工作。这并不是说它不起作用。您要解决的问题是什么?您是否尝试同时显示所有School
、Subject
和 Attachment
审核?
@Tass 没错,我想一起显示。
【参考方案1】:
虽然您无法从深度关联中检索审核,但您可以将审核分组在一起。例如:
school = School.find(params[:id])
audits = school.audits + school.associated_audits
school.subjects.each |subject| audits += subject.associated_audits
我相信这应该为您提供School
、Subject
和Attachments
的整个审计集合。这就是你所追求的吗?
【讨论】:
【参考方案2】:审核的 gem 现在有一个辅助方法:
您可以一次性访问记录自己的审核和相关审核:
company.own_and_associated_audits
【讨论】:
以上是关于审计与 Rails Audited gem 的深度关联的主要内容,如果未能解决你的问题,请参考以下文章
使用 Audited gem 在 Rails 5.2 应用程序中在哪里列出未审核的列?
如何在我的 Rails 控制台中查看 Rails 审计记录?
ActionController::InvalidAuthenticityToken Rails 5 / 设计 / 审核 / PaperTrail gem