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 值,并 运行 如果需要进行迁移以填充现有字段。最好有没有 NULL
s 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') }
这是一个新手问题,这在 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 值,并 运行 如果需要进行迁移以填充现有字段。最好有没有 NULL
s 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') }