Rails ActiveRecord查询where.not(field:[array])忽略带有nil字符串的行?

时间:2016-08-19 17:39:08

标签: ruby-on-rails activerecord

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

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

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

t.string   "name",     limit: 255

问题是上面的查询只返回非零的字段,例如:

返回的对象:

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

忽略的对象:

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

有没有办法构建一个使用字符串数组进行搜索但在结果中包含nil值的rails查询?

返回的内容:

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

1 个答案:

答案 0 :(得分:0)

遇到同样的问题,找到了here

以下是适用的版本范围。

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