Rails中的位置和位置'有效记录

时间:2015-06-30 21:28:18

标签: ruby-on-rails ruby activerecord rails-activerecord

我有一张包含以下字段的表格 bought_at - 空日期
owned - null布尔值

我想模拟以下查询

SELECT * FROM table WHERE bought_at IS NULL AND owned <> 1

我已经尝试了

.where('bought_at IS NULL AND owned <> 1')
.where(bought_at: nil).not(owned: 1) #fails
.where(bought_at: nil).where.not(owned: 1)

还有一些类似的可能性(如rewhere) 所有结果集都是空的。但是,如果我尝试owned: 1owned = 1,它就可以正常工作。

我的代码有问题吗?有什么我想念的吗?

@edit

原来这个问题与ror没有关系。该查询的评估如下:

... AND owned <> 1这就是问题所在。

我仍然不知道为什么,但我认为这与NULL字段的否定有关。由于owned可能为NULL,实际上有时候,我应该始终使用IS NULLIS NOT NULL,并且引擎可能正在尝试使用此运算符&#39;&lt;&gt; &#39;在NULL值上。

解决方案:

... AND (owned = 0 OR owned IS NULL)

在ROR的术语中

.where(bought_at: nil, owned: [0,nil]')

0 个答案:

没有答案