首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用paper_trail gem创建审计跟踪

使用paper_trail gem创建审计跟踪
EN

Stack Overflow用户
提问于 2013-09-20 20:33:55
回答 1查看 1.6K关注 0票数 0

我对rails非常陌生,对使用paper_trail gem也很陌生。

我想显示对资产模型的位置或标签号所做的每一项更改的列表。我安装了paper_trail,它似乎工作正常。在我看来,我的看法是:

代码语言:javascript
复制
<% @asset.versions.order('created_at DESC').each do |version| %>
    On <%= version.created_at %> <%= version.whodunnit %> updated this asset.<br>
    <ul>
        <li>Asset relocated from "<%= version.last.locaton %>" to "<%= version.location %> "</li>
        <li>User changed from "<%= version.last.tag_number %>" to "<%= version.tag_number %> "</li>
    </ul>
<% end %>

这为我提供了正确的信息,说明何时进行更改,以及是谁进行的更改,但我无法显示(例如):将资产从"223“转移到"258”或标记号从"1173“更改为"1175”的行。

理想情况下,我只显示已经改变的信息。因此,如果位置改变,但标签号没有改变,我将只显示位置线。

我甚至不知道从哪里开始。任何帮助都将不胜感激。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2013-09-26 13:16:53

在PaperTrail文档中: PaperTrail有一个可选的表列,可用于创建名为object_changes的版本。这将只存储--不同版本之间所做的更改。这将允许您只显示每个版本之间的更改。它是这样工作的。

代码语言:javascript
复制
>> widget = Widget.create :name => 'Bob'
>> widget.versions.last.changeset                # {'name' => [nil, 'Bob']}
>> widget.update_attributes :name => 'Robert'
>> widget.versions.last.changeset                # {'name' => ['Bob', 'Robert']}
>> widget.destroy
>> widget.versions.last.changeset                # {}

如果您最近将paper_trail添加到您的模型中,那么您可以运行迁移来添加该列。这将跟踪未来的变化。

代码语言:javascript
复制
class AddObjectChangesColumnToVersions < ActiveRecord::Migration
  def self.up
    add_column :versions, :object_changes, :text
  end

  def self.down
    remove_column :versions, :object_changes
  end
end

最近,我需要得到这些更改,但是,我们为20+模型提供了多年的版本数据,并补充说,迁移只会在未来有所帮助,而不会给我提供过去所有的数据更改。

最后,我为PaperTrail创建了一个补丁,它添加了diff_previousdiff_nextdiff_live等方法,这将给我不同的版本。它是基于这个paper_trail(trail.rb#L151-L156)补丁的想法,但我实现它的方式完全不同。如果您需要更多的详细信息,我将看看是否可以开源该修补程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18925408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档