Ruby:查询数组列长度大于X的活动记录

问题描述 投票:0回答:1

我的 postgres 数据库中有这张表:

  create_table "tracking_infos", force: :cascade do |t|
    t.text "carriers", default: [], array: true
    t.text "tracking_numbers", default: [], array: true
    t.string "order_id"
    t.integer "shop_id"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.index ["order_id"], name: "index_tracking_on_order_id", unique: true
  end

我想做的就是查询这个表并返回

tracking_numbers.length
大于 1 的记录。

我真的不知道从哪里开始..尝试了

TrackingInfo.all.pluck(:tracking_numbers)
,然后乱搞返回的数组。但这并不好。

有什么建议吗?

ruby postgresql activerecord
1个回答
0
投票

可能你需要使用 Postgres 的

array_length
函数(参见文档):

TrackingInfo.where("ARRAY_LENGTH(tracking_numbers, 1) > ?", 1).count

请记住,

ARRAY_LENGTH
的第二个参数表示数组的维度(大多数情况下应为1),而
where
的第二个参数替换
?
占位符。

© www.soinside.com 2019 - 2024. All rights reserved.