Rails ActiveRecord查询在哪里.Not (field: [array])忽略字符串为nil的行



我有一个简单的DB查询,正在检查一个特定的字段是否包含3x字符串:

scope :not_abc, -> {
    where.not(name: ['A', 'B', 'C'])
}

有问题的字段只是一个没有默认值的字符串,来自schema.rb:

t.string   "name",     limit: 255
问题是上面的查询只返回非nil的字段,例如: 返回对象:

name = ""
OR
name = "<any string NOT A,B,C>" 

忽略对象:

name = nil
OR
name = "A" or "B" or "C"

是否有任何方法来构建一个rails查询与字符串数组搜索,但在结果中包括nil值?

应该返回什么:

name = nil
OR
name = ""
OR
name = "<any string NOT A,B,C>" 

得到了同样的问题,并在这里找到了解决方案

这是你的作用域在一个版本应该工作。

scope :not_abc, -> {
    where("name NOT IN (?) OR name IS NULL", ['A', 'B', 'C'])
}

最新更新