rails 具有两个值的默认范围

rails default scope with two values

这是一个新手问题,这在 rails 有效吗?

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

我需要 default_scope 检查 'arhiveeritud' false 和 nil。 如果它是假的,我得到一个错误的结果。

您可以在 where 中使用 SQL OR:

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

我建议考虑在该字段上设置一个默认的 false 值,并 运行 如果需要进行迁移以填充现有字段。最好有没有 NULLs esp 的一致列。如果它是布尔列。

没有,你可以试试下面,

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

在原始 SQL 上使用纯 active_record 查询是一种很好的做法。

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

@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') }