Techioz Blog

Ruby: 配列の列の長さが X より大きい場合に activerecord をクエリする

概要

私の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 の 2 番目の引数は配列の次元を表し (ほとんどの場合 1 である必要があります)、where の 2 番目の引数は ? を置き換えることに注意してください。プレースホルダー。