我有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查询执行此操作的方法。任何线索?
答案 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