web-dev-qa-db-fra.com

Comment stocker un tableau avec Ecto à l'aide de Postgres

Je voudrais stocker un tableau de valeurs à virgule flottante avec Ecto en utilisant Postgres. J'utilise Ecto avec le Phoenix Framework et Elixir.

Comment définirais-je mon modèle et ma migration pour cela?

Je n'ai pas beaucoup essayé, sauf en cherchant sur le web, qui n'a rien trouvé d'utile :-(

J'ai essayé de définir un modèle avec un schéma comme celui-ci:

  schema "my_model" do
    field :my_array, :array

    timestamps
  end

qui a donné une erreur "type invalide ou inconnu: tableau pour le champ: my_array"

35
Josh Petitt

J'ai trouvé la réponse dans la liste des types primitifs pour Ecto.Schema ici:

Ecto.Schema

La réponse est de définir le type comme ceci:

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

    timestamps
  end
57
Josh Petitt

Comme vous l'avez écrit, utilisez le type de tableau de Ecto.Schema

Dans le modèle:

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

@neildaemond Migration:

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

Remplacer inner_type avec l'un des types valides, tels que :string.

Vous pouvez également faire la même chose avec un type map:

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