我正在尝试查找指定属性不为空或空白的记录。由于它是一个字符串,它在数据库中不是零。
Post.where(:sourceurl != '')
以上似乎应该可以工作,但我仍然会在 source_url 属性为空的地方返回记录。这样做的正确方法是什么?
我正在尝试查找指定属性不为空或空白的记录。由于它是一个字符串,它在数据库中不是零。
Post.where(:sourceurl != '')
以上似乎应该可以工作,但我仍然会在 source_url 属性为空的地方返回记录。这样做的正确方法是什么?
ActiveRecord(我认为在 Rails 3 和 4 中)允许通过将数组作为参数传递来检查多个条件。因此,如果您想同时检查nil
和''
,您可以使用:
where(sourceurl: [nil, ''])
这将生成一个 SQL 条件,如:
(sourceurl IS NULL OR sourceurl = '')
在 Rails 4 中,您可以使用 .not 检查否定条件,因此对于原始问题,您可以这样做:
Post.where.not(sourceurl: [nil, ''])
.not 有一点魔力,使它有利于纯 SQL 查询,因为它可以跨数据库工作,不会自动执行 NOT NULL 查询,还有一些其他事情,如下所述:where.not explain
试试这个
Post.where("sourceurl <> ''")
导轨 4
活动记录条件:
where.not(value: '')
范围:
scope :myscope, -> { where.not(value: '') }
您的代码不起作用的原因是您的参数#where
是
:sourceurl != ''
计算结果为true
,因为:sourceurl
(符号)不等于''
(空字符串)。因此您的代码与
Post.where(true)
为了详细说明 abhas 的答案,MySQL 和 PostgreSQL 都将接受!=
并<>
作为等效项。
如果该字段在您的数据库中默认为 NULL,我认为解决它的更好方法是使用普通 SQL:
Post.where("sourceurl is not null")
在 postgresql 中捕捉空字符串和 nil 你可以这样做:
where("coalesce(sourceurl, '') != ''")