Fix insane N+1 in Package

The #ships_with? method was being called ~800 times when loading the admin order edit page (with Aus production data), and triggering a new query each time it was called.
This commit is contained in:
Matt-Yorkley
2020-03-23 17:16:33 +01:00
parent c82c54873c
commit 434f98fb46

View File

@@ -24,8 +24,10 @@ module Stock
#
# @return [Array<Spree::ShippingMethod>]
def shipping_methods
super.delete_if do |shipping_method|
!ships_with?(order.distributor, shipping_method)
available_shipping_methods = super.to_a
available_shipping_methods.delete_if do |shipping_method|
!ships_with?(order.distributor.shipping_methods.to_a, shipping_method)
end
end
@@ -33,11 +35,11 @@ module Stock
# Checks whether the given distributor provides the specified shipping method
#
# @param distributor [Spree::Enterprise]
# @param shipping_methods [Array<Spree::ShippingMethod>]
# @param shipping_method [Spree::ShippingMethod]
# @return [Boolean]
def ships_with?(distributor, shipping_method)
distributor.shipping_methods.include?(shipping_method)
def ships_with?(shipping_methods, shipping_method)
shipping_methods.include?(shipping_method)
end
end
end