【问题标题】:ActiveRecord: Query where column NOT in arrayActiveRecord:查询列不在数组中的位置
【发布时间】:2014-12-11 13:40:19
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    使用下面的rails 3

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

    【讨论】:

      【解决方案2】:

      您可以在 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))
      

      【讨论】:

      • 那是在 Rails 4 中引入的吧?我仍然(不情愿地)使用 Rails 3!你能告诉我这个查询生成了什么 SQL 吗?
      • 您可以通过在 ActiveRecord 关系对象上调用 to_sql 来查看生成了什么 sql。查看我的编辑。
      猜你喜欢
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 2014-04-21
      相关资源
      最近更新 更多