【问题标题】:cannot call jsonb_each on a non-object - query broke after rails update无法在非对象上调用 jsonb_each - rails 更新后查询中断
【发布时间】:2021-03-18 21:35:48
【问题描述】:

所以我在 postgres 上有以下 rails 查询,当我运行 rails 4 时运行良好

@products = @products.offset(offset).limit(@limit).where(status: "visible").where("add_to_inventory =? OR (add_to_inventory =? AND inventory !=? )", false, true, "{}").where.not("ARRAY(select distinct (jsonb_each(inventory)).value->>'quantity' as integer)='{0}'")

现在我最近更新到最新的稳定 Rails 5,现在每次评估时都会收到以下错误:

PG::InvalidParameterValue: ERROR: cannot call jsonb_each on a non-object : SELECT DISTINCT "products"."priority" AS alias_0, "products"."id" AS alias_1, "products"."id" FROM "products" INNER JOIN "categories" ON "categories"."deleted" = $1 AND "categories"."id" = "products"."category_id" LEFT OUTER JOIN "product_translations" ON "product_translations"."product_id" = "products"."id" WHERE "products"."deleted" = $2 AND (categories.company_id =1) AND "products"."status" IN ($3, $4) AND "products"."category_id" IN ($5, $6, $7, $8, $9, $10, $11, $12) AND "products"."status" = $13 AND (add_to_inventory =FALSE OR (add_to_inventory =TRUE AND inventory !='{}' )) AND NOT (ARRAY(select distinct (jsonb_each(inventory)).value->>'quantity' as integer)='{0}') ORDER BY "products"."priority" ASC, "products"."id" ASC LIMIT $14 OFFSET $15

导致此问题的可能更改是什么以及如何解决?谢谢

【问题讨论】:

    标签: ruby-on-rails ruby postgresql ruby-on-rails-5


    【解决方案1】:

    在 Rails 5 中,他们更改了这一点,您必须使用默认值:{} 而不是默认值:'{}' 进行 jsob b 迁移。

    工作查询:

    @products = @products.offset(offset).limit(@limit).where(status: "visible").where("add_to_inventory =? OR (add_to_inventory =? AND inventory !=? )", false, true, {}).where.not("ARRAY(select distinct (jsonb_each(inventory)).value->>'quantity' as integer)='{0}'")
    

    【讨论】:

      猜你喜欢
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      相关资源
      最近更新 更多