12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'app/services/populate_version_references.rb', line 12
def process_model(item_type)
versions = RecordVersion.where(reference_data:nil, item_type: item_type).includes(:item)
total_count = versions.size
count = 1
versions.find_in_batches(batch_size: 250) do |versions|
RecordVersion.transaction do
versions.each do |v|
count += 1
puts "[#{count} / #{total_count}] #{item_type} #{v.id} processing"
if v.item
reference_data = v.item.audit_reference_data&.compact&.presence
elsif v.object_changes.present? && (reference_fields = v.item_type.constantize.reference_data).present? reference_data = {}
reference_fields.each do |field_name|
data = v.object_changes[field_name]&.last || v.object_changes[field_name]&.first
reference_data[field_name] = data
end
reference_data = reference_data&.compact&.presence
else v.destroy
end
if reference_data.present?
v.update_column(:reference_data, reference_data)
end
end
end
end
end
|