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]