From a8559e621fb70a99e09dfc05c5377bfc15758b54 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Fri, 19 May 2023 10:54:15 +0100 Subject: [PATCH] Simplify exchange variant callback and prefer delete over destroy Delete is faster than destroy but should only be used if the object has no callbacks or touches. --- app/models/exchange_variant.rb | 10 +++++++--- app/services/variant_deleter.rb | 9 --------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/app/models/exchange_variant.rb b/app/models/exchange_variant.rb index ac835523af..ca3169bde8 100644 --- a/app/models/exchange_variant.rb +++ b/app/models/exchange_variant.rb @@ -3,9 +3,13 @@ class ExchangeVariant < ApplicationRecord belongs_to :exchange belongs_to :variant, class_name: 'Spree::Variant' - after_destroy :destroy_related_outgoing_variants - def destroy_related_outgoing_variants - VariantDeleter.new.destroy_related_outgoing_variants(variant_id, exchange.order_cycle) + after_destroy :delete_related_outgoing_variants + + def delete_related_outgoing_variants + ExchangeVariant.where(variant_id: variant_id). + joins(:exchange). + where(exchanges: { order_cycle: exchange.order_cycle, incoming: false }). + delete_all end end diff --git a/app/services/variant_deleter.rb b/app/services/variant_deleter.rb index d294dfcb98..fb9637f780 100644 --- a/app/services/variant_deleter.rb +++ b/app/services/variant_deleter.rb @@ -11,15 +11,6 @@ class VariantDeleter variant.destroy end - def destroy_related_outgoing_variants(variant_id, order_cycle) - internal_variants = ExchangeVariant.where(variant_id: variant_id). - joins(:exchange). - where( - exchanges: { order_cycle: order_cycle, incoming: false } - ) - internal_variants.destroy_all - end - private def only_variant_on_product?(variant)