activerecord搜索条件 - 查找null或false

Dan*_*iel 26 activerecord ruby-on-rails

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

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

明显,

Project.all(:conditions => {:archived => false})
Run Code Online (Sandbox Code Playgroud)

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

TJC*_*ers 87

Rails 4(可能更早)支持:

Project.where(archived: [false, nil])
Run Code Online (Sandbox Code Playgroud)

......这很简洁.


Ron*_*era 17

试试这个(在Rails 2中):

Project.all(:conditions => ['archived IS NULL OR archived = ?', false])
Run Code Online (Sandbox Code Playgroud)

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


sea*_*rts 7

与数据库无关的正确方法是:

Project.where("archived IS NULL OR archived = ?", false)
Run Code Online (Sandbox Code Playgroud)