Ecto.Enum (Ecto v3.6.1) View Source

A custom type that maps atoms to strings.

Ecto.Enum must be used whenever you want to keep atom values in a field. Since atoms cannot be persisted to the database, Ecto.Enum converts them to a string or an integer when writing to the database and converts them back to atoms when loading data. It can be used in your schemas as follows:

field :status, Ecto.Enum, values: [:foo, :bar, :baz]

or

field :status, Ecto.Enum, values: [foo: 1, bar: 2, baz: 5]

Composite types, such as :array, are also supported:

field :roles, {:array, Ecto.Enum}, values: [:Author, :Editor, :Admin]

:values must be a list of atoms or a keyword list. Values will be cast to atoms safely and only if the atom exists in the list (otherwise an error will be raised). Attempting to load any string/integer not represented by an atom in the list will be invalid.

The helper function values/2 returns the values for a given schema and field, which can be used in places like form drop-downs. For example, given the following schema:

defmodule EnumSchema do
  use Ecto.Schema

  schema "my_schema" do
    field :my_enum, Ecto.Enum, values: [:foo, :bar, :baz]
  end
end

you can call values/2 like this:

Ecto.Enum.values(EnumSchema, :my_enum)
#=> [:foo, :bar, :baz]

Link to this section Summary

Link to this section Functions