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

polhcujo  于 12个月前  发布在  Ruby
关注(0)|答案(1)|浏览(78)

我的postgres db中有这样一个表:

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),然后处理返回的数组。但这不好。
有什么建议吗?

kxkpmulp

kxkpmulp1#

可能你需要使用Postgres的array_length函数(see docs):

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

请记住,ARRAY_LENGTH的第二个参数表示数组的维数(在大多数情况下应该是1),而where的第二个参数替换了?占位符。

相关问题