我在2种型号的菜和配料之间存在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查询执行此操作的方法。有什么线索吗?

最佳答案

我发现这是一种解决方法,不知道是否有更简单的方法来执行此操作。

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

关于mysql - SQL'IN'和'NOT IN'一起,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26915198/

10-11 07:57