You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:39:03