对于基本条件(如 find 语句)和更通用的 where 子句,用户可以查找任何一组条件。例如:
User.find_by_name(["One", "Two", "Three"])
User.find_by_name_and_age(["One", "Two"],[1,2,3])
或者
User.where(:bonus_id => [1,2,3])
但是,它们在这里略有不一致。如果你使用
User.find_by_bonus_id([nil,1,2])
正如预期的那样,这将返回奖励 id 为“nil”的使用!但是,“find_by_... and ...”格式和“where”格式都不能以这种方式工作。
User.where(:bonus_id => [nil,1])
将仅返回 Bonus_id 为 1 的用户。
User.where(:bonus_id => [nil]
将一无所有!
User.where(:bonus_id => nil)
但是,工作正常。
据我所知,where 子句(和 find_by_and 方法)会折叠它们的数组,删除任何不真实的值。这对我来说是一个非常重要的问题。
有谁知道将 nils 包含在 where 子句数组(或解决方法)中的方法,还是我最终必须将多个查询连接在一起才能获得正确的行为?
附加说明:
- 版本 3.0.11
- Nils 实际上并没有被删除,而是在某些情况下它比较的是 IN (NULL) 而不是 SQL 中的 IS NULL。我将保持原样,因为即使它不准确,它也是问题在遇到时首先出现的方式。