如何从rails中的POSTGRES中的查询获取nil值

时间:2016-09-09 06:29:00

标签: ruby-on-rails postgresql

我试图让所有不是列的行都不是特定值。

Task.where('owner_user_id != ?', 429)

但是,这不会返回owner_user_id为nil的行。我想尝试是不同的,但我得到以下错误。

Task.where('owner_user_id is distinct from (429)')
  Task Load (2.3ms)  SELECT  "tasks".* FROM "tasks" WHERE (owner_user_id is distinct from (429)) LIMIT 10 OFFSET 0
  SQLite3::SQLException: near "distinct": syntax error: SELECT  "tasks".* FROM "tasks" WHERE (owner_user_id is distinct from (429)) LIMIT 10 OFFSET 0
  #<Task::ActiveRecord_Relation:0x007f07940ea338>

如何获取列不是特定值的所有行(包括所有包含nil的行)?

3 个答案:

答案 0 :(得分:1)

这将触发2个查询,但这将返回所需的结果

Task.where.not(id: Task.where(owner_user_id: 429).pluck(:id))

答案 1 :(得分:1)

这会触发一个查询,并为您提供包含nil值的结果:

Task.where('owner_user_id != ? OR owner_user_id IS NULL', 429)

希望它有所帮助!

答案 2 :(得分:0)

!=是红宝石的说法&#34;不等于&#34;但是在postgres / sql中,你需要<>,所以

Task.where('owner_user_id <> ?', 429)

或在arel中你也可以这样做:

Task.where.not(:owner_user_id => 429)