Enum.map/2
не будет работать, потому что на самом деле вы должны будете уменьшить набор изменений во многих полях посредством проверки.
Просто объявите обычный приватный используйте функцию, подобную приведенной ниже
@spec validate_length_many(
changeset :: Ecto.Changeset.t(), fields :: [atom()]
) :: Ecto.Changeset.t()
defp validate_length_many(
%Ecto.Changeset{} = changeset, fields
) when is_list(fields) do
Enum.reduce(fields, changeset, fn field, changeset ->
validate_length(changeset, field, max: 255)
end)
end
и используйте ее как
my_model
|> validate_required(required_fields())
|> validate_length_many(~w[f1 f2]a)
или вызовите Enum.reduce/3
напрямую (она не будет транслироваться хорошо, поскольку первый аргумент в вызов Enum.reduce/3
будет список полей).
changeset = validate_required(my_model, required_fields())
Enum.reduce([:f1, :f2], changeset, fn field, changeset ->
validate_length(changeset, field, max: 255)
end) #⇒ changeset