diff --git a/db/migrate/20220425102039_remove_bill_addresses_with_null_phone.rb b/db/migrate/20220425102039_remove_bill_addresses_with_null_phone.rb index 5870d00d8f..282413a56c 100644 --- a/db/migrate/20220425102039_remove_bill_addresses_with_null_phone.rb +++ b/db/migrate/20220425102039_remove_bill_addresses_with_null_phone.rb @@ -1,7 +1,21 @@ class RemoveBillAddressesWithNullPhone < ActiveRecord::Migration[6.1] - def change - remove_foreign_key "spree_users", "spree_addresses", column: "bill_address_id", name: "spree_users_bill_address_id_fk" - add_foreign_key "spree_users", "spree_addresses", column: "bill_address_id", name: "spree_users_bill_address_id_fk", on_delete: :nullify - execute("DELETE from spree_addresses WHERE phone IS NULL AND id IN(SELECT bill_address_id FROM spree_users)") + class BillAddress < ActiveRecord::Base + self.table_name "spree_addresses" + + scope :invalid, -> { where(phone: nil) } + end + + class SpreeUser < ActiveRecord::Base + belongs_to :bill_address + + def self.invalid_bill_address_ids + joins(:bill_address).merge(BillAddress.invalid).pluck(:bill_address_id) + end + end + + def up + address_ids = SpreeUser.invalid_bill_address_ids + SpreeUser.where(bill_address_id: address_ids).update_all(bill_address_id: nil) + BillAddress.where(id: address_ids).delete_all end end