Paper_Trail: показать различия между версиями

Я новичок в 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 %>

Не знаю, как показать разницу между ними.

Очень ценю помощь.


person cwayne2    schedule 27.05.2015    source источник
comment
Вы хотите отобразить разницу между последней версией и записью текущей версии?   -  person Rajendran_R    schedule 27.05.2015


Ответы (2)


Ознакомьтесь с документацией по сравнению версий с помощью PaperTrail. В частности, вот что вы хотите принять к сведению:

Если вы добавите текстовый столбец object_changes в таблицу versions, либо во время установки с параметром rails сгенерируйте paper_trail:install --with-changes или вручную, PaperTrail сохранит разницу изменений (за исключением любых игнорируемых PaperTrail атрибутов) в каждой версии обновления.

Если это поведение включено, достаточно просто получить object.versions.map{|v| [v.created_at, v.changeset]}, а затем повторите эту структуру, чтобы отобразить журнал изменений.

person Maysam Torabi    schedule 16.10.2015

Я предполагаю, что вы установили гем paper_trail. Вы можете добавить текстовый столбец 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 — разные версии

person Rajendran_R    schedule 27.05.2015
comment
Это, кажется, не работает. Да, определенно установил paper_gem... управление версиями у меня работает. Я перезапустил сервер. Что вы имеете в виду под ящиком? @quarterback.versions.last.changeset просто входит в html-файл? Например: '‹tr› ‹th›XOI +/-‹/th› ‹td›‹%= Quarterback.versions.last.changeset %›‹/td› ‹/tr›' - person cwayne2; 27.05.2015
comment
Я предполагаю, что защитник - это имя вашей таблицы. Поэтому после перезапуска сервера создайте еще одну запись. (т.е.) Пример: Quarterback.create(name: 'test') зависит от вашей таблицы. Тогда попробуйте Quarterback.last.versions.last.changeset - person Rajendran_R; 27.05.2015
comment
Извините, это все еще не работает. Я очень новичок в рельсах. Возможно ли, что это связано с тем, что в моей версии модели (созданной для paper_trail) уже есть изменение, определенное как: 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 - person cwayne2; 27.05.2015
comment
Кроме того, я использую RubyMine в качестве IDE, что мне очень помогает. - person cwayne2; 27.05.2015