带有两个值的rails默认范围

时间:2018-12-12 10:50:42

标签: ruby-on-rails ruby-on-rails-4

这是一个初学者的问题,这在铁轨上有效吗?

default_scope { where(:arhiveeritud => false||nil).order('id') }

我需要default_scope检查'arhiveeritud'是否为 false和nil 。 如果错误,我会得到错误的结果。

3 个答案:

答案 0 :(得分:3)

不,您可以尝试关注

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

在原始SQL上使用纯active_record查询是一个好习惯。

答案 1 :(得分:1)

您可以在OR中使用SQL where

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

我建议考虑在该字段上设置默认的false值,并在需要时执行迁移以填充现有字段。最好具有一致的列而没有NULL的情况。如果是布尔列。

答案 2 :(得分:0)

将近一年又1000万之后,我想发布更好的答案。当我比较聪明的时候。

@ray和@mrzasa答案都是正确的,但是它是像这样创建sql ... WHERE (arhiveeritud IS false OR arhiveeritud IS NULL) ORDER BY id DESC ...

什么时候可以做得更好...我们可以使用postgresql COALESCE检查NULL和false

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