我对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”的行。
理想情况下,我只显示已经改变的信息。因此,如果位置改变,但标签号没有改变,我将只显示位置线。
我甚至不知道从哪里开始。任何帮助都将不胜感激。谢谢!
发布于 2013-09-26 13:16:53
在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+模型提供了多年的版本数据,并补充说,迁移只会在未来有所帮助,而不会给我提供过去所有的数据更改。
最后,我为PaperTrail创建了一个补丁,它添加了diff_previous、diff_next、diff_live等方法,这将给我不同的版本。它是基于这个paper_trail(trail.rb#L151-L156)补丁的想法,但我实现它的方式完全不同。如果您需要更多的详细信息,我将看看是否可以开源该修补程序。
https://stackoverflow.com/questions/18925408
复制相似问题