在rails中相互减去两个查询

时间:2014-01-12 15:31:01

标签: ruby-on-rails

我是铁杆的新手,甚至是红宝石,所以我在解决这个问题上遇到了一些麻烦。

我想找到两个查询之间的区别。此特定查询应返回单个记录,因为我已将其设置为使Recipe缺少配方中的一个ID。 目前的代码:

q = Recipe.all - Recipe.where(recipe_id: 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

虽然两者都没有帮助。

3 个答案:

答案 0 :(得分:5)

试试这个:

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

答案 1 :(得分:1)

原来我问的是错误的问题。

由于ID数组是带有额外元素的数组,而不是数据库查询,我应该一直在比较它与查询的区别。

我的回答如下:

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

返回缺少的ID。

答案 2 :(得分:0)

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

q = Recipe.where.not(id: recipes)

这将生成以下查询:

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