在Activerecord中,对于字段foo
可能为nil,false,true,.where.not(foo: true)
不会返回foo不为真的所有记录...它将忽略foo为nil的所有记录
回想一下,我认为这并不奇怪,因为Activerecord要求您在直接查询时使用[nil, false]
,但是在所有其他使用.where.not()都返回.where()的意义上,这是违反直觉的。 )
问题:是否存在.where.not(Z)的变体,不管Z是否涉及布尔值,它都可以工作吗?还是有一个设置告诉ActiveRecord“ not true”是[nil,false]而不只是'false'?
> Ticket.count
=> 6953
> Ticket.where(outbound: true).count
=> 2
> Ticket.where.not(outbound: true).count
=> 0 # does NOT count the 6951 records where boolean is "not true"
> Ticket.where.not(outbound: true).to_sql
=> "SELECT \"tickets\".* FROM \"tickets\" WHERE \"tickets\".\"outbound\" != TRUE"