diff --git a/app/models/exchange.rb b/app/models/exchange.rb index 90db51c36f..484afc77de 100644 --- a/app/models/exchange.rb +++ b/app/models/exchange.rb @@ -20,7 +20,7 @@ class Exchange < ActiveRecord::Base scope :from_enterprises, lambda { |enterprises| where('exchanges.sender_id IN (?)', enterprises) } scope :to_enterprises, lambda { |enterprises| where('exchanges.receiver_id IN (?)', enterprises) } scope :with_variant, lambda { |variant| joins(:exchange_variants).where('exchange_variants.variant_id = ?', variant) } - scope :any_variant, lambda { |variants| joins(:exchange_variants).where('exchange_variants.variant_id IN (?)', variants) } + scope :any_variant, lambda { |variants| joins(:exchange_variants).where('exchange_variants.variant_id IN (?)', variants).select('DISTINCT exchanges.*') } scope :with_product, lambda { |product| joins(:exchange_variants).where('exchange_variants.variant_id IN (?)', product.variants_including_master) } def clone!(new_order_cycle) diff --git a/spec/models/exchange_spec.rb b/spec/models/exchange_spec.rb index 870025b29f..4562cdda05 100644 --- a/spec/models/exchange_spec.rb +++ b/spec/models/exchange_spec.rb @@ -114,10 +114,12 @@ describe Exchange do it "finds exchanges with any of a number of variants" do v1 = create(:variant) v2 = create(:variant) + v3 = create(:variant) ex = create(:exchange) ex.variants << v1 + ex.variants << v2 - Exchange.any_variant([v1, v2]).should == [ex] + Exchange.any_variant([v1, v2, v3]).should == [ex] end it "finds exchanges with a particular product's master variant" do