Ecto.Enum select underlying id

That’s the idea of the enum in this case, to separate the presented value from the persisted one. What I would advise is to create a helper module which can encode and decode integers to and from :"Zone A", :"Zone B" and so on. You should do the encoding/decoding at the “points” where your code interacts with the external word e.g. HTTP endpoints, database. This would allow you to work only with meaningful values and your comparisons will work.