这个问题建立在此基础之上 active record where method and not
Item.where("color != ?", 'red')
或带有.where.not
的模拟不会返回nil值。如何查询以包含这些内容?
答案 0 :(得分:3)
底层问题是SQL数据库如何与NULL进行比较,而不是Rails或ActiveRecord的工作方式。如果您想要颜色为NULL的记录,则必须使用类似where color IS NULL
的内容明确包含它们。 NULL不被视为"不是红色"。最终,要获得所需内容,SQL中需要or
来涵盖这两种情况。
在ActiveRecord中,你需要这个:
Item.where("color != ? or color is null", 'red')
你也可以这样做:
Item.where("color != ?", 'red').or(Item.where(color: nil))