已审核的 gem 未审核删除关系

Posted

技术标签:

【中文标题】已审核的 gem 未审核删除关系【英文标题】:Removing relations is not being audited by audited gem 【发布时间】:2016-03-08 12:36:09 【问题描述】:

我正在使用 Associated Audits 与 Collective Idea 的 audited gem 建立 has_many through 关系。我看到 create 审计正在添加 through 模型,但删除该关系后我看不到任何审计。

这是我的 3 个模型。一个Post 可以是多个Categories

app/models/post.rb

class Post < ActiveRecord::Base
  audited
  has_associated_audits

  has_many :categorizations, dependent: :destroy
  has_many :categories, through: :categorizations
end

app/models/category.rb

class Category < ActiveRecord::Base
  audited
  has_associated_audits

  has_many :categorizations, dependent: :destroy
  has_many :posts, through: :categorizations
end

app/models/categorization.rb

class Categorization < ActiveRecord::Base
  audited
  audited associated_with: :post
  audited associated_with: :category

  belongs_to :category
  belongs_to :post
end

我的Post 表单有一堆用于分类的复选框:

<%= f.association :categories, as: :check_boxes, collection: Category.order(:name), label_method: :name, value_method: :id, label: false %>
当我编辑现有的 Post选中一个框以查找 Category 时,我确实在审核的操作字段。 当我编辑现有的 Post取消选中Category 的框时,我没有看到新的审核条目。

当我删除Post 时,我确实看到PostCategorization auditable_type 字段的destroy 审计,所以这方面工作得很好。

    audited 可以跟踪这些取消选择吗?如果有,怎么做? 我在上述模型中的审核设置是否有任何明显的错误/错误?没有可遵循的 has_many through 文档,所以我猜了一下。

【问题讨论】:

【参考方案1】:

可能与this Rails issue 相关,我不得不换掉我的dependent: :destroy 行:

app/models/post.rb

class Post < ActiveRecord::Base
  audited
  has_associated_audits

  has_many :categorizations
  has_many :categories, through: :categorizations, dependent: :destroy
end

app/models/category.rb

class Category < ActiveRecord::Base
  audited
  has_associated_audits

  has_many :categorizations
  has_many :posts, through: :categorizations, dependent: :destroy
end

有了这个设置,我看到了添加和删除关系的审计。

【讨论】:

以上是关于已审核的 gem 未审核删除关系的主要内容,如果未能解决你的问题,请参考以下文章

使用 rails audited gem 根据已审核的更改过滤掉结果

不审核 OneToMany 关系的缺点是啥?

社保转移网上申请审核不通过

已审核:nil:NilClass 的未定义方法“关联”

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

已审核的宝石 添加关于销毁的评论