我正在尝试查询我的数据库中可见字段为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)
答案 0 :(得分:2)
那是因为
Company.where('visible=?', nil)
进行查询:
公司加载(0.3毫秒)SELECT
companies
。* FROMcompanies
WHERE (visible = NULL)
在SQL中,要与 NULL 进行比较,=
不起作用。它需要IS
代替。
Company.where('visible is ?', nil)
应该为你做的伎俩。添加或声明它。
公司加载(0.3毫秒)SELECT
companies
。* FROMcompanies
WHERE (可见为NULL)
或者,完美的方式:
Company.where(:visible => [true, nil])
答案 1 :(得分:1)
问题是您的数据库中没有NOT NULL约束。
您还可以使用条件表达式(CASE
)或函数COALESCE
。