这是一个初学者的问题,这在铁轨上有效吗?
default_scope { where(:arhiveeritud => false||nil).order('id') }
我需要default_scope
检查'arhiveeritud'
是否为 false和nil 。
如果错误,我会得到错误的结果。
答案 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') }