4

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

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

找不到任何文档。所有帮助开始表示赞赏。

4

2 回答 2

6

几个月前我在使用 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"]}。这意味着您有以字符串为键的散列和具有两个值的数组。第一个值是更新前的值,第二个值是更新后的值。

于 2016-10-07T17:56:34.670 回答
2

感谢@ 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
于 2016-12-23T09:01:13.810 回答