使用Audited gem删除记录时添加audit_comment的相关问题咨询
Audited gem 删除操作添加audit_comment 解决方案
主动删除场景
直接在调用destroy方法前给实例的audit_comment属性赋值即可,逻辑和创建/更新时赋值完全一致:
your_instance.audit_comment = "用户主动移除" your_instance.destroy
执行后生成的删除操作审计日志会自动带上该评论。
关联父对象触发删除场景
这种场景默认不会自动传递audit_comment,需要额外加逻辑实现:
- 首先确保关联关系配置的是
dependent: :destroy,不能用dependent: :delete_all,后者不会触发模型实例的回调,Audited也无法生成对应审计记录 - 给子模型加虚拟标记属性,配合
around_destroy回调自动注入对应评论:
# 子模型代码 class ChildModel < ApplicationRecord belongs_to :parent_model audited # 加虚拟属性标记是否由父对象删除触发 attr_accessor :triggered_by_parent_destroy around_destroy :set_delete_audit_comment private def set_delete_audit_comment self.audit_comment = "父对象删除触发移除" if triggered_by_parent_destroy yield # 执行实际删除操作 end end # 父模型代码 class ParentModel < ApplicationRecord has_many :child_models, dependent: :destroy audited before_destroy :mark_child_trigger_source private def mark_child_trigger_source # 给所有关联子对象打上标记 child_models.each { |c| c.triggered_by_parent_destroy = true } end end
你没有遗漏官方文档的明确说明,Audited官方文档仅重点提到了创建、更新场景的audit_comment用法,删除场景的用法和更新逻辑一致,属于文档覆盖不全的部分。
内容的提问来源于stack exchange,提问作者cal1801
相关产品推荐
相关产品推荐

