diff --git a/lib/tasks/migrate_old_tinymce_assets.rake b/lib/tasks/migrate_old_tinymce_assets.rake index 57731c645..b4aa5d11b 100644 --- a/lib/tasks/migrate_old_tinymce_assets.rake +++ b/lib/tasks/migrate_old_tinymce_assets.rake @@ -5,19 +5,29 @@ namespace :tinymce_assets do desc 'Migrate old TinyMCE images to new polymorphic format' \ 'IT SHOULD BE RUN ONE TIME ONLY' task migrate_tinymce_assets: :environment do - old_images = TinyMceAsset.where('step_id IS NOT NULL OR result_text_id IS NOT NULL').where(object: nil) - old_images.each do |old_image| - old_format = /\[~tiny_mce_id:#{old_image.id}\]/ - new_format = "" - if old_image.step_id - object = old_image.step - object.description.sub!(old_format, new_format) - else - object = old_image.result_text - object.text.sub!(old_format, new_format) + ActiveRecord::Base.no_touching do + old_images = TinyMceAsset.where('step_id IS NOT NULL OR result_text_id IS NOT NULL') + .where(object: nil) + .preload(:step, :result_text) + old_images.find_each do |old_image| + ActiveRecord::Base.transaction do + old_format = /\[~tiny_mce_id:#{old_image.id}\]/ + new_format = "" + if old_image.step_id + object = old_image.step + object.description.sub!(old_format, new_format) + else + object = old_image.result_text + object.text.sub!(old_format, new_format) + end + object.save! + old_image.update!(object_id: object.id, object_type: object.class.to_s, step_id: nil, result_text_id: nil) + rescue StandardError => ex + Rails.logger.error "Failed to update TinyMceAsset id: #{old_image.id}" + Rails.logger.error ex.message + raise ActiveRecord::Rollback + end end - object.save - old_image.update(object: object, step_id: nil, result_text_id: nil) end end end