当在活动记录中进行搜索时,我正在查找没有归档位设置为true的记录。activerecord搜索条件 - 寻找空或假
某些归档位为空(未归档)其他归档设置为false。
显然,
Project.all(:conditions => {:archived => false})
错过与空值归档位的项目。如何选择所有未归档项目的活动记录?
当在活动记录中进行搜索时,我正在查找没有归档位设置为true的记录。activerecord搜索条件 - 寻找空或假
某些归档位为空(未归档)其他归档设置为false。
显然,
Project.all(:conditions => {:archived => false})
错过与空值归档位的项目。如何选择所有未归档项目的活动记录?
试试这个(中梁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
@metasoarous
尝试:
Project.all(:conditions => "archived IS NULL OR archived = 'F'")
如果你想成为数据库不可知论者,你可以在Rails 3:
Project.where("archived IS NULL OR archived = #{ActiveRecord::Base.connection.quoted_false}")
@ SeanLazer的答案在Rails 3.0.9中可用,看起来有点干净。 – John 2012-08-03 02:44:49
正确的数据库无关的方式来做到这一点是:
Project.where("archived IS NULL OR archived = ?", false)
谢谢!适用于SQLite和Postgres。如果您认为这不起作用,请仔细检查您的数据库**中的值是否为假,而不是空值。会救了我一些困惑。 – John 2012-08-03 02:43:59
轨道4(可能更早)支持:
Project.where(archived: [false, nil])
...这是相当简洁。
作品中的Rails 3.2.14 – Trip 2014-04-20 12:19:25
也发现了这个工作(有点题外话,但另一种方式来使用空: Project.where(存档:VALID_VALUES + [无]) 如... Project.where (linkage:account.project_codes.map(&:id)+ [nil]) – TJChambers 2014-05-08 22:51:34
这应该是被接受的答案。 – 2015-10-09 19:29:44
Ron - 我按照你的建议从SQLite收到以下错误消息。 SQLite3 :: SQLException:没有这样的列:FALSE:SELECT * FROM“review_phases”WHERE(关闭IS NULL或关闭= FALSE)LIMIT 20 OFFSET 0是否SQLite只是处理布尔值不同而不工作? – metasoarous 2010-03-25 20:32:32