Подтвердить что ты не робот

Как сохранить массив с помощью Ecto с помощью Postgres

Я хотел бы сохранить массив значений с плавающей запятой, используя Ecto, используя Postgres. Я использую Ecto с Phoenix Framework и Elixir.

Как я могу определить мою модель и миграцию для этого?

Я не много пробовал, кроме поиска в Интернете, который не нашел ничего полезного: - (

Я попытался определить модель с такой схемой:

  schema "my_model" do
    field :my_array, :array

    timestamps
  end

который дал ошибку "недопустимый или неизвестный тип: array for field: my_array"

4b9b3361

Ответ 1

Я нашел ответ в списке примитивных типов для Ecto.Schema здесь:

Ecto.Schema

Ответ заключается в том, чтобы определить тип, подобный этому:

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

    timestamps
  end

Ответ 2

Как вы написали, используйте тип массива из 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