我的 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)
,然后乱搞返回的数组。但这并不好。
有什么建议吗?
可能你需要使用 Postgres 的
array_length
函数(参见文档):
TrackingInfo.where("ARRAY_LENGTH(tracking_numbers, 1) > ?", 1).count
请记住,
ARRAY_LENGTH
的第二个参数表示数组的维度(大多数情况下应为1),而where
的第二个参数替换?
占位符。