Avoid trying to delete address referenced elsewhere

This commit is contained in:
Maikel Linke
2022-09-27 13:13:26 +10:00
parent 286dade66f
commit 4e33bd2713

View File

@@ -2,8 +2,28 @@
class DeleteDuplicateCustomers < ActiveRecord::Migration[6.1]
class Customer < ActiveRecord::Base
belongs_to :bill_address, class_name: "SpreeAddress", dependent: :destroy
belongs_to :ship_address, class_name: "SpreeAddress", dependent: :destroy
belongs_to :bill_address, class_name: "SpreeAddress"
belongs_to :ship_address, class_name: "SpreeAddress"
after_destroy do
destroy_unused_address(bill_address)
destroy_unused_address(ship_address)
end
def destroy_unused_address(record)
return unless record
return if in_use?(SpreeOrder, record)
return if in_use?(Customer, record)
return if in_use?(SpreeUser, record)
record.destroy
end
def in_use?(model, record)
model.where(bill_address_id: record).or(
model.where(ship_address_id: record)
).present?
end
end
class SpreeAddress < ActiveRecord::Base
@@ -15,6 +35,12 @@ class DeleteDuplicateCustomers < ActiveRecord::Migration[6.1]
class Subscription < ActiveRecord::Base
end
class Customer < ActiveRecord::Base
end
class SpreeUser < ActiveRecord::Base
end
def up
say "#{grouped_duplicates.keys.count} customers with duplicates."