Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails默认范围有两个值_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails rails默认范围有两个值

Ruby on rails rails默认范围有两个值,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,这是一个初学者的问题,这在rails中有效吗 default_scope { where(:arhiveeritud => false||nil).order('id') } 我需要default\u范围检查'arhiveeritud'是否为false和nil。 如果结果为false,我会得到一个错误的结果。您可以使用SQL或中的where: default_scope { where("arhiveeritud = ? OR arhiveeritud IS NULL", false).

这是一个初学者的问题,这在rails中有效吗

default_scope { where(:arhiveeritud => false||nil).order('id') }
我需要
default\u范围
检查
'arhiveeritud'
是否为false和nil
如果结果为false,我会得到一个错误的结果。

您可以使用SQL
中的
where

default_scope { where("arhiveeritud = ? OR arhiveeritud IS NULL", false).order(:id) }

我建议您在该字段上设置一个默认的false值,并在需要时运行迁移以填充现有值。最好使用不带NULL的一致列,尤其是布尔列。

否,您可以尝试以下操作:

default_scope { where(arhiveeritud: [false, nil]).order('id') }

在原始SQL上使用纯活动记录查询是一种很好的做法

在将近一年和1000万年之后,我想要一个更好的答案。当我聪明一点的时候

@ray和@mrzasa的答案都是正确的,但它是这样创建sql的…
其中(arhiveeritud为false或arhiveeritud为NULL)ORDER BY id DESC

当我们可以做得更好时…我们可以使用postgresql
COALESCE
检查NULL和false

default_scope { where("COALESCE(arhiveeritud, false) = false").order('id') }

感谢您的时间和快速回复@mrzasa和@ray!