Ecto Custom Field Validation

Minimal snippet to define a custom validation for a field in Elixir’s Ecto library.

# declare this in your schema file
defp validate_language(changeset, field, options \\ []) do
  validate_change(changeset, field, fn _, str ->
    case str in ["en", "de"] do
      true -> []
      false -> [{field, options[:message] || "Invalid Language"}]
    end
  end)
end

# use it like this
# ...
changeset
|> validate_language(:my_field_name)
# ...

This minimal example validates that a given string field contains only allowed values. In this case, language codes are used.

Technologies: