我有这个(简化)架构中的地址的外生模式:如何添加有条件的必填字段?
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
我想所需,而不是可选的标记zip
,但前提是该国正处于一个白名单,但我不能找出一个干净的方式来编写验证。我如何添加该约束?