diff --git a/app/models/spree/stock/quantifier.rb b/app/models/spree/stock/quantifier.rb index 6b1c11de62..806fdf33dd 100644 --- a/app/models/spree/stock/quantifier.rb +++ b/app/models/spree/stock/quantifier.rb @@ -5,7 +5,7 @@ module Spree def initialize(variant) @variant = variant - @stock_items = Spree::StockItem.joins(:stock_location).where(:variant_id => @variant, Spree::StockLocation.table_name =>{ :active => true}) + @stock_items = fetch_stock_items end def total_on_hand @@ -23,6 +23,16 @@ module Spree def can_supply?(required) total_on_hand >= required || backorderable? end + + private + + def fetch_stock_items + # Don't re-fetch associated stock items from the DB if we've already eager-loaded them + return @variant.stock_items.to_a if @variant.stock_items.loaded? + + Spree::StockItem.joins(:stock_location). + where(:variant_id => @variant, Spree::StockLocation.table_name => { active: true }) + end end end end