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 番目の引数は ? を置き換えることに注意してください。プレースホルダー。