Product.where(['color = ?',nil])
给出 SQL
SELECT "products".* FROM "products" WHERE (color = NULL)
而不是我想要的,那就是:
SELECT "products".* FROM "products" WHERE (color IS NULL)
(
color IS NULL
,不是color = NULL
)
使用哈希语法:
Product.where(color: nil)
给了我想要的
SELECT "products".* FROM "products" WHERE "products"."color" IS NULL
但我认为使用哈希语法会失去数组语法提供的反 SQL 注入的好处。
编辑 - 我省略了说条件将是一个变量,有时但并不总是为零:
Product.where(['color IS ?',nil])
按照我的要求做,但是
Product.where(['color IS ?','red'])
例如当然会失败
你错了,它提供了与数组语法相同的 SQL 注入保护。
main> Foo.where name: "' OR 1=1; --"
Foo Load (0.8ms) SELECT "foos".* FROM "foos" WHERE "foos"."name" = $1 /* loading for pp */ LIMIT $2 [["name", "' OR 1=1; --"], ["LIMIT", 11]]
[]