diff --git a/app/models/repository_object.rb b/app/models/repository_object.rb index bd2ea7fa5..45f2f4cd0 100644 --- a/app/models/repository_object.rb +++ b/app/models/repository_object.rb @@ -13,7 +13,7 @@ class RepositoryObject < ApplicationRecord class VersionAlreadyOpened < StandardError; end class VersionNotOpened < StandardError; end - has_many :versions, -> { order(version: :asc) }, class_name: 'RepositoryObjectVersion', dependent: :destroy, inverse_of: 'repository_object' + has_many :versions, -> { order(version: :asc) }, class_name: 'RepositoryObjectVersion', dependent: :destroy, inverse_of: 'repository_object', autosave: true has_many :user_versions, through: :versions belongs_to :head_version, class_name: 'RepositoryObjectVersion', optional: true diff --git a/bin/migrate-cocina b/bin/migrate-cocina index 93d6d920a..2a0f7d236 100755 --- a/bin/migrate-cocina +++ b/bin/migrate-cocina @@ -84,6 +84,8 @@ def perform_migrate(migrator_class:, obj:, mode:) current_object_version = obj.head_version.version obj = open_version(cocina_object: obj, version_description: migrator.version_description, mode:) if migrator.version? + # For active record migrations, we need to wrap the migration in a transaction and save the object instead of + # opening/closing versions if mode == :commit obj.transaction do migrator.migrate