【问题标题】:Query postgres integer array with Rails where values are not nil使用 Rails 查询 postgres 整数数组,其中值不是 nil
【发布时间】:2017-11-24 15:15:13
【问题描述】:

我正在尝试为我的矛盾模型构建一个范围,其中 evaluation_parameters 属性仅包含非 NULL 值。 我有记录,其中此属性完全为空 {} 或两个值之一为 nil {123, NULL},我希望在我的结果中不包含这些。

这是我的迁移:

add_column :contradictions, :evaluation_parameters, :integer, array: true, default: []

我已经尝试过以下查询,它只返回空数组的记录

Contradiction.all.where.not("NULL = ANY (evaluation_parameters)")

关于我如何做到这一点的任何建议? 谢谢你:)

【问题讨论】:

    标签: ruby-on-rails ruby postgresql


    【解决方案1】:

    首先:

    evaluation_parameters 应该是:text,而不是:integer

    那么您要查找的查询是:

    Contradiction.where("evaluation_parameters = '{}'")

    这将获取所有评估参数等于空数组的矛盾。

    【讨论】:

    • 感谢您的输入,但是这样做只会给我一个空数组的结果。我想要的是数组中的两个值都不为空的所有矛盾(例如{123, 123})。我也不明白为什么我必须转换为:text,因为我将 id 存储在这个数组中。
    【解决方案2】:

    我在这里找到了答案Check if NULL exists in Postgres array 我的最终查询如下所示:

    Contradiction.where.not(evaluation_parameters: '{}').where.not("-1 = ANY(evaluation_parameters) IS NULL")
    

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多