我有一個產品有許多變體,這些變體有兩個屬性:大小和顏色。
我想查詢基於兩個屬性,我通過在變 - 我得到了它與下面的工作:基於兩個關聯記錄查詢
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)}
從我的理解,選擇方法通過數組,這或多或少迭代有點慢。我寧願有一個查詢直接基於這兩個屬性查找變體。
我試過如下:
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})
但這只是在返回一個空數組結束了。
我該怎麼辦?
編輯:下面是產品,變型和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
這將工作,如果他們實際上會是不同的屬性,但他們不是。產品has_many option_values,導致變體。因此,可悲的是,只是查詢尺寸和顏色本身而已。 –
你能顯示模型代碼嗎?產品,變體等... –
添加到模型的Github的鏈接,我希望能解釋它更多一點。大小和顏色是選項類型。 –