私はこの(簡体字)スキーマを持つアドレスのエクトモデルがありますが、国がホワイトリストにあるが、私ができない場合にのみ、私は必要に応じて、代わりにオプションのzip
をマークしたい条件付き必須フィールドを追加する方法は?
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
を検証を書くためのきれいな方法を見つけ出してください。その制約をどのように追加するのですか?