Ruby on rails 在rails中相互减去两个查询

Ruby on rails 在rails中相互减去两个查询,ruby-on-rails,Ruby On Rails,我对rails甚至ruby都是新手,所以我很难弄清楚这一点 我想找出两个查询之间的区别。这个特定的查询应该返回一条记录,因为我已经将它设置为Recipe缺少recipes中的一个ID。 当前代码: q = Recipe.all - Recipe.where(recipe_id: recipes) 其中recipes是一个ID数组 从我对该语言的有限理解来看,如果Recipe.all和Recipe.where都返回数组,这将起作用 我花了一些时间在网上搜索,没有任何东西能帮到我 我尝试过的其他事

我对rails甚至ruby都是新手,所以我很难弄清楚这一点

我想找出两个查询之间的区别。这个特定的查询应该返回一条记录,因为我已经将它设置为Recipe缺少recipes中的一个ID。 当前代码:

q = Recipe.all - Recipe.where(recipe_id: recipes)
其中recipes是一个ID数组

从我对该语言的有限理解来看,如果Recipe.all和Recipe.where都返回数组,这将起作用

我花了一些时间在网上搜索,没有任何东西能帮到我

我尝试过的其他事情:

q = [Recipe.all] - [Recipe.where(recipe_id: recipes)]
q = Recipe.where.not(recipe_id: recipes) # Wouldn't work because the array is the one with the extra id
尽管两种方法都没有帮助。

尝试以下方法:

q = Recipe.where('recipe_id NOT IN (?)', recipes)

如果您使用的是Rails 4,则可以使用

这将生成以下查询:

SELECT "recipes".* FROM "recipes" WHERE ("recipes"."id" NOT IN (12, 8, 11, 5, 6, 7))

结果我问错了问题

由于ID数组是带有额外元素的数组,而不是数据库查询,所以我应该比较它与查询之间的差异

我的答覆如下:

q = recipes - Recipe.where(recipe_id: recipes).ids

返回丢失的ID。

结果是我问错了问题。由于ID数组是具有额外记录的数组,因此我应该将该数组与Recipe.where的结果进行比较。我不知道如何修改这个,但我会把我的答案写在答案里。
q = recipes - Recipe.where(recipe_id: recipes).ids