【问题标题】:Paper_Trail: Show Diff Between VersionsPaper_Trail:显示版本之间的差异
【发布时间】: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 %>

不确定如何显示两者之间的区别。

非常感谢您的帮助。

【问题讨论】:

  • 要显示上一个版本和当前版本记录的区别吗?

标签: ruby-on-rails ruby versions paper-trail-gem


【解决方案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,我觉得这很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2015-08-18
    • 2015-12-13
    • 2012-12-07
    • 2011-06-24
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 2012-11-20
    相关资源
    最近更新 更多