我正在尝试执行一个activerecord查询,它本质上是这样做的。
我有三位模特在一段多到多的关系中
class Item < ActiveRecord::Base
has_many :item_modifiers, dependent: :destroy
has_many :modifiers, through: :item_modifiers
end
class ItemModifier < ActiveRecord::Base
belongs_to :item
belongs_to :modifier
end
class Modifier < ActiveRecord::Base
has_many :item_modifiers
has_many :items, through: :item_modifiers
end现在,我希望找到所有具有IDs 1和2的修饰符的项。
我试过几件事,比如:
Item.includes(:modifiers).where(modifiers: {id: 1}).where(modifiers: {id: 2})这将失败,因为它搜索ID =1和ID =2的修饰符,这些修饰符总是为false。
这也不管用
Item.includes(:modifiers).where(modifiers: {id: [1, 2]})因为这会执行IN (1,2)查询,所以它返回带有1或2修饰符的项。
我似乎错过了一些很简单的东西,但我就是想不起来。
提前谢谢。
发布于 2014-02-13 06:21:58
它可以是:
Item.joins(:item_modifiers).where("item_modifiers.modifier_id=1 OR
item_modifiers.modifier_id=2").group("items.id").having("COUNT(item_modifiers.id)=2")如果用普通SQL写,则可能是:
SELECT I.*, COUNT(IM.id) FROM items as I INNER JOIN item_modifiers AS IM on I.id=IM.item_id
WHERE IM.modifier_id=1 OR IM.modifier_id=2 GROUP BY I.id HAVING COUNT(IM.id)=2它将得到所有的项目,其修饰符的id包括1和2。也许在不同的DB,该语句需要稍加修改。
https://stackoverflow.com/questions/21746327
复制相似问题