使用带Squeel的NOT运算符?

时间:2013-02-18 12:00:54

标签: ruby-on-rails ruby squeel

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

2 个答案:

答案 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) }

干杯