我试图搜索帖子值是假还是零。
Post.where.not(:top_card => true)
这只返回false值。我已经确认,如果我执行以下任一操作,它将返回正确的值
Post.where(:top_card => false)
要么
Post.where(:top_card => nil)
知道我怎么能得到nil和false值的帖子?
我使用错误的方法进行搜索吗?
像Post.where(top_card: [false, nil]
一样使用。
哪个会产生SELECT * FROM posts WHERE (posts.top_card IN (false, nil))
在Rails guides - Subset Conditions查看更多信息。
Post.where("top_card != ? OR top_card IS NULL")
请注意,这将适用于字符串字段,而@Vucko接受的答案则不会。即,如果您无法在查询中列出所有选项的详尽列表。
例如这会奏效
User.where.not("status != ? OR status IS NULL", "active")