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解决方案!!!
答案 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])