![]()
I usually go with 1.
# migration
create table(:car_conditions, primary_key: false) do
add :name, :string, primary_key: true
end
flush()
Repo.insert_all("car_conditions", [
%{name: "new"},
%{name: "excellent"},
# ...
])
create table(:cars) do
# ...
add :contidion_name,
references(:car_conditions,
column: :name,
type: :string,
on_delete: :nilify_all,
on_update: :update_all
),
default: "good"
# ...
end
# schema
schema "cars" do
# ...
field :condition_name, :string # or a custom ecto type like CarCondition
# or field :condition, :string, source: :condition_name
# or belongs_to if you have a schema for the condition type
# ...
end
What do you all think is the best approach and why? Under what conditions would you choose one approach over another?
I think all approaches are more or less equivalent … I’ve found 1. a bit easier to manage than enums.


















