SQL'IN'和'NOT IN'在一起

时间:2014-11-13 17:50:23

标签: mysql ruby-on-rails activerecord

我有2个型号Dish和Ingredient之间的HABTM关系。 我想找到含有一些成分但不包含其他成分的菜肴。

这就是我所做的:

likes = [1,2,3] # id of ingredients i like
dislikes = [6,7] # id of ingredients i don't like

@dishes = Dish.joins(:ingredients).where("ingredients.id IN (?) AND ingredients.id NOT IN (?)",likes,dislikes).group("dishes.id")

这不会返回所需的结果,我找不到使用SQL查询执行此操作的方法。任何线索?

1 个答案:

答案 0 :(得分:0)

这是我发现的解决方法,不知道是否有更简单的方法可以做到这一点。

right = Dish.joins(:ingredients).where("ingredients.id IN (#{likes})").group("dishes.id")
not_right = Dish.joins(:ingredients).where("ingredients.id IN (#{dislikes})").group("dishes.id")    
@dishes = right - not_right