多くのバリエーションを持つ製品があります。これらのバリエーションには、サイズと色の 2 つの属性があります。
渡す2つの属性に基づいてバリアントを照会したい-次のように動作するようになりました:
variants = Spree::Variant.joins(:option_values).where(:spree_option_values => {:id => size.id}, :product_id => prod.id).joins(:option_values)
variant = variants.select{|v| v.option_values.include?(size)}
私の理解では、 select メソッドは多かれ少なかれ配列を反復処理しますが、これは少し遅いです。これら 2 つの属性に基づいてバリアントを直接検索するクエリが必要です。
私は次のことを試しました:
Spree::Variant.joins(:option_values).where(:spree_option_values => {:id => size.id}, :product_id => prod.id).joins(:option_values).where(:spree_option_values => {:id => color.id})
しかし、これは空の配列を返すことになりました。
これについてどうすればいいですか?
編集: product、variant、および option_values モデルは次のとおりです。
製品: https://github.com/spree/spree/blob/master/core/app/models/spree/product.rb
バリアント: https://github.com/spree/spree/blob/master/core/app/models/spree/variant.rb
OptionValue: https://github.com/spree/spree/blob/master/core/app/models/spree/option_value.rb OptionType: https://github.com/spree/spree/blob/master/core/app /models/spree/option_type.rb