web-dev-qa-db-ja.com

Postgresを使用してEctoで配列を保存する方法

Postgresを使用してEctoで浮動小数点値の配列を保存したいと思います。 EctoとPhoenix FrameworkおよびElixirを使用しています。

このためにモデルと移行をどのように定義しますか

Webを検索する以外、あまり試したことはありませんが、Webを検索しても有用なものは見つかりませんでした:-(

私はこのようなスキーマでモデルを定義しようとしました:

  schema "my_model" do
    field :my_array, :array

    timestamps
  end

「フィールド:my_arrayの無効または不明なタイプ:array」というエラーが発生しました

35
Josh Petitt

Ecto.Schemaのプリミティブ型のリストで答えを見つけました:

Ecto.Schema

答えは、次のようにタイプを定義することです。

  schema "my_model" do
    field :my_array, {:array, :float}

    timestamps
  end
57
Josh Petitt

あなたが書いたように Ecto.Schema の配列型を使用します

モデル内:

schema "my_model" do
  field :my_array, {:array, inner_type}
end

@neildaemondの移行:

alter table(:my_models) do
  add :my_array, {:array, inner_type}
end

inner_typeを、:stringなどの有効なタイプのいずれかに置き換えます。

map型でも同じことができます:

schema "my_model" do
  field :my_map, {:map, inner_type}
end
27
Bartek Skwira