簡體   English   中英

使用paper_trail gem創建審核跟蹤

[英]Create an audit trail using paper_trail gem

我是Rails的新手,並且是使用paper_trail gem的新手。

我想顯示對資產模型的位置或標簽號所做的每項更改的列表。 我已經安裝了paper_trail,它似乎可以正常工作。 在我看來,我有:

<% @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”。

理想情況下,我只會顯示發生變化的信息。 因此,如果位置發生了變化,但標簽號沒有變化,我將僅顯示位置線。

我什至不知道從哪里開始。 任何幫助,將不勝感激。 謝謝!

來自PaperTrail文檔:PaperTrail有一個可選的表格列,可在創建稱為object_changes版本時使用。 這將存儲版本之間所做的更改。 這樣您就可以只顯示每個版本之間的更改。 它是這樣的。

>> 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添加到模型中,則可以運行遷移以添加此列。 這將跟蹤未來的變化。

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多個模型的多年版本數據,並且補充說,遷移只會在將來有所幫助,而不能提供過去的所有數據更改。

我為diff_previous創建了一個補丁,添加了diff_previousdiff_nextdiff_live類的方法,這會給我帶來版本之間的差異。 它基於paper_trail( https://github.com/jeremyw/paper_trail/blob/master/lib/paper_trail/has_paper_trail.rb#L151-L156 )的補丁思想,但我實現起來卻完全不同。 如果您需要更多詳細信息,我將查看是否可以開源該補丁。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM