Fix: 一部環境でマイグレーションできない問題 (#336)

* Fix: 一部環境でマイグレーションできない問題

* Fix

* Fix

* Add settings test
This commit is contained in:
KMY(雪あすか) 2023-12-07 10:06:07 +09:00 committed by KMY
parent 43e462e56f
commit f84dae2db6
2 changed files with 30 additions and 24 deletions

View file

@ -13,18 +13,8 @@ class AddMasterSettingsToAccounts < ActiveRecord::Migration[7.1]
safety_assured do
add_column :accounts, :master_settings, :jsonb
if Rails.env.test?
Account.transaction do
Account.find_in_batches do |accounts|
accounts.each do |account|
account.update(master_settings: { 'subscription_policy' => account.dissubscribable ? 'block' : 'allow' })
end
end
end
else
Account.where(dissubscribable: true).update_all(master_settings: { 'subscription_policy' => 'block' }) # rubocop:disable Rails/SkipsModelValidations
Account.where(dissubscribable: false).update_all(master_settings: { 'subscription_policy' => 'allow' }) # rubocop:disable Rails/SkipsModelValidations
end
ActiveRecord::Base.connection.execute("UPDATE accounts SET master_settings = json_build_object('subscription_policy', 'block') WHERE accounts.dissubscribable IS TRUE")
ActiveRecord::Base.connection.execute("UPDATE accounts SET master_settings = json_build_object('subscription_policy', 'allow') WHERE accounts.dissubscribable IS FALSE")
remove_column :accounts, :dissubscribable
end
@ -34,18 +24,8 @@ class AddMasterSettingsToAccounts < ActiveRecord::Migration[7.1]
safety_assured do
add_column_with_default :accounts, :dissubscribable, :boolean, default: false, allow_null: false
if Rails.env.test?
Account.transaction do
Account.find_in_batches do |accounts|
accounts.each do |account|
account.update(dissubscribable: account.master_settings.present? && account.master_settings['subscription_policy'] != 'allow')
end
end
end
else
Account.where(master_settings: { subscription_policy: 'block' }).update_all(dissubscribable: true) # rubocop:disable Rails/SkipsModelValidations
Account.where(master_settings: { subscription_policy: 'allow' }).update_all(dissubscribable: false) # rubocop:disable Rails/SkipsModelValidations
end
ActiveRecord::Base.connection.execute("UPDATE accounts SET dissubscribable = TRUE WHERE master_settings ->> 'subscription_policy' = 'block'")
ActiveRecord::Base.connection.execute("UPDATE accounts SET dissubscribable = FALSE WHERE master_settings ->> 'subscription_policy' = 'allow'")
remove_column :accounts, :master_settings
end