Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 使用EXTO变更集删除尾随和前导空格_Elixir_Ecto - Fatal编程技术网

Elixir 使用EXTO变更集删除尾随和前导空格

Elixir 使用EXTO变更集删除尾随和前导空格,elixir,ecto,Elixir,Ecto,在将Changeset/2插入数据库之前,在调用Changeset/2时,是否有一种内置的方法可以删除exto.Changeset中字段的尾随空格和前导空格 目前,我正在向模式中添加两个自定义函数,用于数据过滤,以提高数据完整性: defp trim_fields(changeset, fields) do Enum.reduce(fields, changeset, &trim(&2, &1)) end defp trim(changeset, field) d

在将
Changeset/2
插入数据库之前,在调用
Changeset/2
时,是否有一种内置的方法可以删除
exto.Changeset
中字段的尾随空格和前导空格


目前,我正在向模式中添加两个自定义函数,用于数据过滤,以提高数据完整性:

defp trim_fields(changeset, fields) do
  Enum.reduce(fields, changeset, &trim(&2, &1))
end

defp trim(changeset, field) do
  if get_change(changeset, field) do
    update_change(changeset, field, &String.trim/1)
  else
    changeset
  end
end
然后,该功能可以通过管道传输到
变更集/2
功能中,例如:

def changeset(%Customer{} = customer, attrs) do
  |> cast(attrs, [:first_name, :last_name])
  |> validate_required([:first_name], [:last_name])
  |> trim_fields([:first_name, :last_name])
end
因为我认为这是一个常见的用例,所以我想知道是否有一个函数已经提供了这个功能


如果此功能尚未在Ecto中提供,那么从Ectos API的角度来看,添加此类功能并将其命名为
filter\u trim
filter\u…
,我想?

我认为最好在运行验证之前修剪输入。此外,
update\u change
仅在给定密钥发生更改时执行更改

这将导致稍微简化的代码:

changeset
|> cast(attrs, [:first_name, :last_name])
|> update_change(:first_name, &String.trim/1)
|> update_change(:last_name, &String.trim/1)
|> validate_required([:first_name, :last_name])

我忽略了一个事实,
update\u change
仅在给定键发生更改时执行给定函数。谢谢