【发布时间】:2009-09-26 15:36:23
【问题描述】:
在活动记录中进行搜索时,我正在寻找未将归档位设置为 true 的记录。
一些存档位为空(未存档),其他已存档位设置为 false。
显然,
Project.all(:conditions => {:archived => false})
错过了具有空值存档位的项目。如何在活动记录中选择所有未归档的项目?
【问题讨论】:
标签: ruby-on-rails activerecord
在活动记录中进行搜索时,我正在寻找未将归档位设置为 true 的记录。
一些存档位为空(未存档),其他已存档位设置为 false。
显然,
Project.all(:conditions => {:archived => false})
错过了具有空值存档位的项目。如何在活动记录中选择所有未归档的项目?
【问题讨论】:
标签: ruby-on-rails activerecord
Rails 4(可能更早)支持:
Project.where(archived: [false, nil])
...非常简洁。
【讨论】:
试试这个(在 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
【讨论】:
执行此操作的正确的与数据库无关的方法是:
Project.where("archived IS NULL OR archived = ?", false)
【讨论】:
@metasoarous
试试:
Project.all(:conditions => "archived IS NULL OR archived = 'F'")
【讨论】:
如果您想与数据库无关,可以在 Rails 3 中执行此操作:
Project.where("archived IS NULL OR archived = #{ActiveRecord::Base.connection.quoted_false}")
【讨论】: