Ich habe ein ecto Modell für eine Adresse mit diesem (vereinfachte) Schema:Wie füge ich ein bedingtes Pflichtfeld hinzu?
defmodule Address do
use Ecto.Model
schema "addresses" do
field :zip, :string
field :country, :string
# snip
end
@countries_requiring_zip ~w(US) # snip
def changeset(model, params \\ :empty) do
model
|> cast(params, ~w(country), ~w(zip))
|> validate_zip
end
defp validate_zip(changeset) do
if get_field(changeset, :country) in @countries_requiring_zip do
# ????
end
changeset
end
end
I zip
nach Bedarf statt optional, aber nur, wenn das Land in einer weißen Liste markieren möchten ist, aber ich kann nicht finde einen sauberen Weg, die Validierung zu schreiben. Wie füge ich diese Einschränkung hinzu?