Paper_Trail:显示版本之间的差异
Posted
技术标签:
【中文标题】Paper_Trail:显示版本之间的差异【英文标题】:Paper_Trail: Show Diff Between Versions 【发布时间】:2015-08-08 23:47:21 【问题描述】:我是 Rails 新手...使用 RubyMine 作为 IDE。
我有 Paper_Trail 保存以前版本的数据“xoi_qb”。我的视图目前正在显示当前和以前的数据,但我想显示当前版本“xoi_qb”和以前版本“xoi_qb”之间的差异。例如,当前版本可能是“97”,之前的版本可能是“94”,我想显示“XOI +/-: +3”。我想显示这种差异,并根据正面或负面的变化添加“+”或“-”。
在我的模型中,Paper Trail 设置为创建如下版本:
def get_xoi_qb
xoi_qb = []
self.versions.each do |version|
unless version.reify.nil?
xoi_qb << version.reify.xoi_qb
end
end
return xoi_qb
end
并且在我的 html 集中显示这样的版本:
<th>Previous XOI</th>
<table>
<% @quarterback.versions.each do |version| %>
<tr>
<td><%= version.reify.xoi_qb %> dated <%= version.created_at %></td>
</tr>
<% end %>
不确定如何显示两者之间的区别。
非常感谢您的帮助。
【问题讨论】:
要显示上一个版本和当前版本记录的区别吗? 【参考方案1】:看看the documentation on diffing versions with PaperTrail。特别是,您需要注意以下几点:
如果您在 versions 表中添加 object_changes 文本列,则可以在安装时使用 rails generate paper_trail:install --with-changes 选项或手动,PaperTrail 将在每个更新版本中存储更改差异(不包括 PaperTrail 忽略的任何属性)。
启用此行为后,获取 object.versions.map|v| 相当简单[v.created_at, v.changeset] 然后遍历该结构以呈现您的更改日志。
【讨论】:
【参考方案2】:我假设您已经安装了 paper_trail gem。 您可以手动或通过迁移将 object_changes 文本列添加到您的版本表中。
rails g migration AddColumnToVersions
class AddColumnToVersions < ActiveRecord::Migration
def change
execute "ALTER TABLE versions ADD object_changes TEXT"
end
end
然后重新启动服务器。创建记录。
检查最新版本和当前版本的区别
@quarterback.versions.last.changeset
你可以得到差异。
来源:https://github.com/airblade/paper_trail - 不同版本
【讨论】:
这似乎不起作用。是的,肯定安装了 paper_gem ...版本控制对我有用。我重新启动了服务器。 “板条箱”是什么意思? @quarterback.versions.last.changeset 是否只进入 html 文件?例如:'def change create_table :versions do |t| t.string :item_type, :null => false t.integer :item_id, :null => false t.string :event, :null => false t.string :whodunnit t.text :object t.datetime :created_at t.datetime :updated_at end add_index :versions, [:item_type, :item_id] end
另外,我使用 RubyMine 作为 IDE,我觉得这很有帮助。以上是关于Paper_Trail:显示版本之间的差异的主要内容,如果未能解决你的问题,请参考以下文章