From 9161be759afeede067d2310b042acfaa5b78b75d Mon Sep 17 00:00:00 2001 From: Go MAEDA Date: Tue, 29 Oct 2024 01:11:29 +0000 Subject: [PATCH] Add a migration to update existing journals where `updated_by_id` points to a deleted user (#41572). git-svn-id: https://svn.redmine.org/redmine/trunk@23170 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- ...haned_journal_updated_by_id_to_anonymous.rb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 db/migrate/20241026031710_update_orphaned_journal_updated_by_id_to_anonymous.rb diff --git a/db/migrate/20241026031710_update_orphaned_journal_updated_by_id_to_anonymous.rb b/db/migrate/20241026031710_update_orphaned_journal_updated_by_id_to_anonymous.rb new file mode 100644 index 000000000..2afb774c7 --- /dev/null +++ b/db/migrate/20241026031710_update_orphaned_journal_updated_by_id_to_anonymous.rb @@ -0,0 +1,18 @@ +class UpdateOrphanedJournalUpdatedByIdToAnonymous < ActiveRecord::Migration[7.2] + def up + # Don't use `User.anonymous` here because it creates a new anonymous + # user if one doesn't exist yet. + anonymous_user_id = AnonymousUser.unscoped.pick(:id) + # The absence of an anonymous user implies a fresh installation. + return if anonymous_user_id.nil? + + Journal.joins('LEFT JOIN users ON users.id = journals.updated_by_id') + .where.not(updated_by_id: nil) + .where(users: { id: nil }) + .update_all(updated_by_id: anonymous_user_id) + end + + def down + # no-op + end +end -- 2.39.5