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 文件?例如:' XOI +/- ' 我假设四分卫是你的表名。所以在重新启动服务器后,再创建一条记录。(即)Ex: Quarterback.create(name: 'test') 取决于你的表。然后试试,Quarterback.last.versions.last.changeset 很抱歉,这仍然无法正常工作。我对rails很陌生。是否有可能是因为在我的“版本”模型(为 paper_trail 创建)中已经将“更改”定义为:def change create_table :versions do |t| t.string :item_type, :null =&gt; false t.integer :item_id, :null =&gt; false t.string :event, :null =&gt; 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:显示版本之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

查找当前版本和上一个版本之间的差异

显示提交之间的差异

Google Maps API 版本差异

Git:显示两次提交之间的总文件大小差异?

SQL - 如何显示多行结果之间的差异

显示本地文件和远程副本之间的差异