On this page
Ecto.Enum
A custom type that maps atoms to strings or integers.
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:
# Stored as strings
field :status, Ecto.Enum, values: [:foo, :bar, :baz]
or
# Stored as integers
field :status, Ecto.Enum, values: [foo: 1, bar: 2, baz: 5]
Therefore, the type to be used in your migrations for enum fields depend on the choice above. For the cases above, one would do, respectively:
add :status, :string
or
add :status, :integer
Some databases also support enum types, which you could use in combination with the above.
Composite types, such as :array
, are also supported which allow selecting multiple values per record:
field :roles, {:array, Ecto.Enum}, values: [:author, :editor, :admin]
Overall, :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 mappings/2
returns the mappings 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 mappings/2
like this:
Ecto.Enum.mappings(EnumSchema, :my_enum)
#=> [foo: "foo", bar: "bar", baz: "baz"]
If you want the values only, you can use Ecto.Enum.values/2
, and if you want the dump values only, you can use Ecto.Enum.dump_values/2
.
Summary
Functions
- dump_values(schema, field)
-
Returns the possible dump values for a given schema and field
- mappings(schema, field)
-
Returns the mappings for a given schema and field
- values(schema, field)
-
Returns the possible values for a given schema and field
Functions
dump_values(schema, field)Source
@spec dump_values(module(), atom()) :: [String.t()] | [integer()]
Returns the possible dump values for a given schema and field
mappings(schema, field)Source
@spec mappings(module(), atom()) :: Keyword.t()
Returns the mappings for a given schema and field
values(schema, field)Source
@spec values(module(), atom()) :: [atom()]
Returns the possible values for a given schema and field
© 2013 Plataformatec
© 2020 Dashbit
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/ecto/Ecto.Enum.html