activerecord搜索条件 - 查找null或false

时间:2009-09-26 15:36:24

标签: ruby-on-rails activerecord

在活动记录中进行搜索时,我正在查找没有将归档位设置为true的记录。

某些归档位为空(未归档),其他归档设置为false。

显然,

Project.all(:conditions => {:archived => false})

使用带有空值的存档位错过项目。如何从活动记录中选择所有非归档项目?

5 个答案:

答案 0 :(得分:83)

Rails 4(可能更早)支持:

Project.where(archived: [false, nil])

......这很简洁。

答案 1 :(得分:17)

试试这个(在Rails 2中):

Project.all(:conditions => ['archived IS NULL OR archived = ?', false])

这是旧版Rails的限制,如下所述:https://rails.lighthouseapp.com/projects/8994/tickets/1181-ar-find-producing-null-when-it-should-be-is-null

答案 2 :(得分:7)

正确的数据库不可知的方法是:

Project.where("archived IS NULL OR archived = ?", false)

答案 3 :(得分:0)

@metasoarous

尝试:

Project.all(:conditions => "archived IS NULL OR archived = 'F'")

答案 4 :(得分:0)

如果您想与数据库无关,可以在Rails 3中执行此操作:

Project.where("archived IS NULL OR archived = #{ActiveRecord::Base.connection.quoted_false}")