【问题标题】:rails default scope with two valuesrails 默认范围有两个值
【发布时间】: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


    【解决方案1】:

    不,你可以试试关注,

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

    最好在原始 SQL 上使用纯 active_record 查询。

    【讨论】:

      【解决方案2】:

      您可以在where 中使用SQL OR

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

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

      【讨论】:

      • 感谢您的时间和快速响应@mrzasa 和@ray!
      【解决方案3】:

      经过将近 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') }
      

      【讨论】:

        猜你喜欢
        • 2011-09-02
        • 1970-01-01
        • 1970-01-01
        • 2014-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-04
        相关资源
        最近更新 更多