为什么 Rails 6 不允许我在 WHERE 子句中使用 `attr: nil`?

问题描述

在 Rails 6(使用 Postgresql)中,当我将 attr: nil 放入 WHERE 子句时,ActiveRecord 会将 1=0 放入 sql,即使数据库中有 {{1} 为 NULL 的记录}

我希望它按照 this answer

attr 放入 sql

当我使用这样的数组时,它只能按预期工作:"attr" IS NULL,这是为什么?

这就是我在 Rails 控制台中得到的:

attr: [nil]

这很令人沮丧,因为这意味着当我在 where 子句中使用变量时,如果变量有可能为零,我必须记住将它们放入数组中(我总是希望 nil 与我的 WHERE 子句中的 NULL 匹配,因为数据库中的NULL总是被ActiveRecord返回给我作为nil)

Rails 版本是 6.0.0.beta3 6.1.4

这是我的 gemfile:

irb(main):048:0> puts Output.where(value: nil).to_sql
SELECT "outputs".* FROM "outputs" WHERE 1=0

irb(main):049:0> puts Output.where(value: [nil]).to_sql
SELECT "outputs".* FROM "outputs" WHERE "outputs"."value" IS NULL

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)