【发布时间】:2018-12-12 10:50:42
【问题描述】:
这是一个初学者问题,这在 Rails 中有效吗?
default_scope { where(:arhiveeritud => false||nil).order('id') }
我需要 default_scope 检查 'arhiveeritud' 是否为 false 和 nil。
如果它是假的,我会得到一个错误的结果。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4
这是一个初学者问题,这在 Rails 中有效吗?
default_scope { where(:arhiveeritud => false||nil).order('id') }
我需要 default_scope 检查 'arhiveeritud' 是否为 false 和 nil。
如果它是假的,我会得到一个错误的结果。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4
不,你可以试试关注,
default_scope { where(arhiveeritud: [false, nil]).order('id') }
最好在原始 SQL 上使用纯 active_record 查询。
【讨论】:
您可以在where 中使用SQL OR:
default_scope { where("arhiveeritud = ? OR arhiveeritud IS NULL", false).order(:id) }
我建议考虑在该字段上设置一个默认的 false 值,并在需要填写现有字段时运行迁移。最好有没有NULLs esp 的一致列。如果它是一个布尔列。
【讨论】:
经过将近 1 年和 10m 之后,我想发布更好的答案。当我稍微聪明一点的时候。
@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') }
【讨论】: