2015-11-11 1 views

Répondre

0

Cela devrait faire le travail. Vous pouvez encore optimiser ceci en excluant les attributs exclus de papertrail tels que les horodatages, etc.

class AddChangesetsToVersions < ActiveRecord::Migration[5.0] 
    def change 
    add_column :versions, :object_changes, :jsonb 
    reversible do |dir| 
     dir.up do 
     PaperTrail::Version.find_each do |version| 
      old_attr = version.object || {} 
      new_attr = version.next&.object || version.item&.attributes_before_type_cast || {} 

      changed_attrs = (old_attr.keys | new_attr.keys).delete_if { |attr| 
      old_attr[attr] == new_attr[attr] 
      } 
      changes = changed_attrs.map {|attr| 
      [ 
       attr, 
       [ 
       old_attr[attr], 
       new_attr[attr] 
       ] 
      ] 
      }.to_h 
      version.update_column :object_changes, changes 
     end 
     end 
    end 
    end 
end