您可以这样做:
从您的ModelA构建一个查询,然后(通过连接模型)加入ModelB,过滤出具有您要查找的值之一的ModelB,即将它们放入OR(即
where ModelB = 'ModelB_1' or ModelB = 'ModelB_2'
)。 通过此查询,结果集将具有多个“ ModelA”行,对于每个满足的ModelB条件,该行恰好为一行 。在您需要的ModelA列上的查询中按条件添加一组(如果需要,甚至可以将它们全部添加)。每行 的count( )等于满足的ModelB条件数*。
添加一个“具有”条件,仅选择
count(*)
等于您需要满足的ModelB条件数的行
例子:
model_bs_to_find = [100, 200]ModelA.all( :joins=>{:model_a_to_b=>:model_bs}, :group=>"model_as.id", :select=>"model_as.*", :conditions=>["model_bs.id in (?)", model_bs_to_find], :having=>"count(*)=#{model_bs_to_find.size}")注意,以这种方式指定的组和选择参数将在MySQL中工作,这样做的标准SQL方法是将整个model_as列的列表放入组和选择参数中。



