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