3

如何使用 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
4

2 回答 2

2

NOT将反转返回的集合,因此您必须定义要比较的内容。

(-deleted) #there is nothing to reverse

根据您的评论,我认为您的意思是deleted not equal true,所以:

Document.where { -(deleted == true) | (deleted == nil) }

然而,真的反转是假的,对吧?所以,你可以说:

Document.where { (deleted == false) | (deleted == nil) }
于 2013-02-18T12:40:03.607 回答
2

值得注意的是,ActiveRecord 将布尔值作为字符串标志存储在数据库中。因此,在您提到的情况下,document.deletedequals'f'是一个真值。这就是为什么你不能简单地使用NOT操作符。

也许您正在寻找的是:

Document.where { deleted.eq(false) | deleted.eq(nil) }

干杯

于 2013-02-18T12:41:34.250 回答