如何使用Squeel编写SQL查询?
SELECT * FROM documents where (NOT document.deleted OR document.deleted IS NULL)
我试过了:
Document.where { (-deleted) | (deleted == nil) }
但得到此错误:
NoMethodError: undefined method `|' for deleted.-@:Squeel::Nodes::KeyPath
答案 0 :(得分:2)
NOT
将反转返回的集合,因此您必须定义要比较的内容。
(-deleted) #there is nothing to reverse
根据您的评论,我认为您的意思是deleted not equal true
,所以:
Document.where { -(deleted == true) | (deleted == nil) }
但是,相反的是真的是假的,对吧?所以,你可以说:
Document.where { (deleted == false) | (deleted == nil) }
答案 1 :(得分:2)
注意ActiveRecord将布尔值存储为数据库中的字符串标志非常重要。因此,在您提到的情况下,document.deleted
等于'f'
,这是真值。这就是为什么你不能简单地使用NOT
运算符。
也许您正在寻找的是:
Document.where { deleted.eq(false) | deleted.eq(nil) }
干杯