ActiveRecord:查询数组中NOT列的位置

时间:2014-10-16 08:55:02

标签: mysql ruby-on-rails ruby ruby-on-rails-3 activerecord

ActiveRecord有一个非常简洁的语法,用于查询记录,其中列等于给定数组中的任何值:

举一个简单的例子,假设您有10种产品,其中包含ID 1,2,3,4,5,6,7,8,9,10。

Product.where(id: [2,3,4,5,6])

将退回产品2,3,4,5和6。

是否存在ActiveRecord等效项,用于查询列的数据与数组中的任何值相等?

类似的东西:

Product.where('id != ?', [2,3,4,5,6])

除了它确实有效......

当你在这种情况下通过它[2,3,4,5,6]时,它将返回产品1,7,8,9和10.

修改

我需要一个Rails 3解决方案!!!

2 个答案:

答案 0 :(得分:11)

您可以在Rails 4中使用where.not否定任何where子句:

Product.where.not(id: [2, 3, 4, 5, 6])

在Rails 3中,您可以利用ARel:

Product.where(Product.arel_table[:id].not_in([2, 3, 4, 5, 6]))

两种情况下生成的SQL都是

SELECT "products".* FROM "products" WHERE ("products"."id" NOT IN (2, 3, 4, 5, 6))

答案 1 :(得分:3)

以下用于rails 3

Product.where('id NOT IN (?)', [2,3,4,5,6])