我的Rails / ActiveRecord中的MySQL查询有问题。
首先,我的数据模型:
class Product < ActiveRecord::Base
has_many :product_answers, dependent: :destroy
has_many :answers, :through => :product_answers
end
class ProductAnswer < ActiveRecord::Base
belongs_to :product
belongs_to :answer
attr_accessible :answer_id, :product_id
end
class Answer < ActiveRecord::Base
has_many :product_answers, dependent: :destroy
has_many :products, :through => :product_answers
end
现在我的搜索查询存在问题:
例如,我有两个产品:
Product1:包括answer.id = 13和answer.id = 25 Product2:包括answer.id = 14和answer.id = 89
现在我的第一个查询如下:
Product.joins(:answers).where("answers.id" => [13,14])
=> [Product1, Product2]
我需要按所有产品过滤此查询及其答案,包括[13,4]和[25]中answers.ids
的组合
在逻辑形式中,我需要这样的东西:
where (answers.id = 13 and answers.id = 25) or (answers.id = 14 and answers.id = 25)
我的第一个想法是这样的。
Product.joins(:answers)where("answers.id" => [13,14]).where("answers.id" => 25)
但这不起作用。
有没有好的解决方案,不进行单独的查询然后组合它们?
由于
编辑:
好的,我有一个结合多个查询的解决方案。
sub_answers = [[13,14], [25]]
pre_product_list = nil
sub_answers.each do |sub_answer|
if pre_product_list.nil?
pre_product_list = Product.joins(:product_answers).where('product_answers.answer_id' => answers).group("id").map{ |pa| pa.id }
else
pre_product_list = Product.joins(:product_answers).where('product_answers.product_id' => pre_product_list, 'product_answers.answer_id' => answers).group("id").map{ |pa| pa.id }
end
end
end
有人可能有更好的解决方案吗?我期待着进一步的建议。