Rails 5 - 使用 Audited gem 查看更改

Posted

技术标签:

【中文标题】Rails 5 - 使用 Audited gem 查看更改【英文标题】:Rails 5 - view changes using Audited gem 【发布时间】:2017-02-16 03:30:32 【问题描述】:

在我为学习 RoR 而构建的应用中,我想添加更改跟踪并为此使用 Audited gem。虽然很清楚如何将其添加到我的模型中,但我如何才能看到更改?

我想在每个页面上为打开审核日志视图的不同对象/类/模型添加一个链接/按钮。即列出按更改日期/时间排序的所有更改(日期/时间、字段、旧值、新值、按用户)。

找不到任何文档。感谢您对入门的所有帮助。

【问题讨论】:

【参考方案1】:

感谢@dnsh,我更改了他的代码并添加了其他内容:

%table.table.table-hover
  %thead
    %tr
      %th Type
      %th When
      %th Who
      %th What Changed
    - model.audits.order(:created_at).each do |audit|
      %tr
        %td= audit.action
        %td= audit.created_at
        %td= audit.user.name
        %td
          - audit.audited_changes.each do |k, v|
            %b= k.titleize
            - if v.class == Array # if updated
              from
              %b= "'#v[0]'"
              to
              %b= "'#v[1]'"
              %br
            - else # if created
              = v

【讨论】:

我不知道为什么这个答案被赞成,但它目前不起作用,因为审计方法会抛出一个未定义的错误消息***.com/questions/27353017/…【参考方案2】:

几个月前我在使用 Papertrail Gem 时需要精确的功能。我修改了我的代码以适用于经过审核的 gem。我希望下面的haml代码会给你一个很好的开始。

%table.table.table-hover
  %thead
    %tr
      %th Type
      %th When
      %th Who
      %th What Changed
    - model.audits.order(:created_at).each do |audit|
      %tr
        %td= audit.action
        %td= audit.created_at
        %td= audit.user.name
        %td
          - audit.audited_changes.each do |k, v|
            %b= k.titleize
            from
            %b= "'#v[0]'"
            to
            %b= "'#v[1]'"
            %br

代码是不言自明的如果你通过https://github.com/collectiveidea/audited

audited_changes 的解释: 对于 audited_changes,我们有类似 audit.audited_changes # => "name"=>["Steve", "Ryan"] 的哈希值。这意味着您有以字符串为键的散列和具有两个值的数组。第一个值是更新前,第二个是更新后。

【讨论】:

Tx Dinesh - 本周初会看一下。然后告诉你。 注意:audited_changes 值可以是数组或字符串! - audit.audited_changes.each 做|k, v| %b= k.titlesize - 如果 v.class== 数组从 = "'#v[0]'" 到 =# "'#v[1]'" - else = "'#v '" %br 为什么我得到undefined method 'audits'?我正在运行 Ruby 2.5.1、Rails 5.2.0 和 Audited 4.8.0。我复制了代码,然后用我的模式名称/类替换 model 您遇到的问题是如何解决的? @DavidAngulo

以上是关于Rails 5 - 使用 Audited gem 查看更改的主要内容,如果未能解决你的问题,请参考以下文章

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

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

审计与 Rails Audited gem 的深度关联

如何在 Rails 中调试 gem?

安装acts_as_audited 时遇到问题

如何向 Rails 4 中的所有 ActiveRecord 模型添加 `audited` 方法调用?