Rails 4:OR where where子句不用于查询nil

时间:2016-08-24 18:55:21

标签: ruby-on-rails ruby-on-rails-4

我正在尝试查询我的数据库中可见字段为NULL或true的任何公司。这是我在Stackoverflow帖子上找到的内容:

@companies = Company.where('visible=? OR visible=?', nil, true).page(params[:page]).per(10)

不知怎的,这似乎不适用于查询nil。当我使用这段代码时,显示所有可见的nil的公司虽然效果很好。

@companies = Company.where('visible' => nil).page(params[:page]).per(10)

我非常感谢这里的任何想法。

谢谢!

编辑:

这仍然只显示可见为零的公司:

@companies = Company.where('visible is ? OR visible=?', nil, true).page(params[:page]).per(10)

2 个答案:

答案 0 :(得分:2)

那是因为 Company.where('visible=?', nil)进行查询:

  

公司加载(0.3毫秒)SELECT companies。* FROM companies WHERE   (visible = NULL)

在SQL中,要与 NULL 进行比较,=不起作用。它需要IS代替。

Company.where('visible is ?', nil)应该为你做的伎俩。添加或声明它。

  

公司加载(0.3毫秒)SELECT companies。* FROM companies WHERE   (可见为NULL)

或者,完美的方式:

Company.where(:visible => [true, nil])

答案 1 :(得分:1)

问题是您的数据库中没有NOT NULL约束。

您还可以使用条件表达式(CASE)或函数COALESCE