HABTM按多个相关记录搜索

时间:2013-04-12 20:39:25

标签: ruby-on-rails has-and-belongs-to-many

以下问题:
我有一个产品的ID和两个IDS for Option Values。我想查找与产品ID和两个选项值ID匹配的Variant。 所以对于一个例子:

  

我有一个名为“Tshirt”的产品,我想要的产品是Blue和Large。

我的以下设置是:

product.rb

class Product < ActiveRecord::Base
  has_many :variants
end 

variant.rb

class Variant < ActiveRecord::Base
  belongs_to :product
  has_and_belongs_to_many :option_values, :join_table => :spree_option_values_variants
end

option_values.rb

class OptionValue < ActiveRecord::Base

  has_and_belongs_to_many :variants, :join_table => 'spree_option_values_variants', :class_name => "Spree::Variant"
end

现在,我有:

以上面的例子为例:

  

Spree :: Variant.includes(:option_values).where(:spree_option_values =&gt; {:id =&gt; [color.id,size.id]},:product_id =&gt; product.id)

这很难让我回到所有大或蓝的变体。我很难,我想要大而蓝的Variant。

1 个答案:

答案 0 :(得分:0)

我想我找到了答案,它在2个查询中解决了这个问题:

(Spree::Variant.joins(:option_values).where(:spree_option_values => {:id => color.id}, :product_id => self.id) & Spree::Variant.includes(:option_values).where(:spree_option_values => {:id => size.id}, :product_id => self.id)).last