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

时间:2018-04-10 09:27:08

标签: elixir ecto

在将Ecto.Changeset插入数据库之前调用changeset/2时,Ecto中是否有内置方法可以删除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 中字段的尾随和前导空格?

目前,我正在为我的架构添加两个自定义函数以进行数据过滤,以提高数据完整性:

changeset/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 函数中使用例如管道输入函数。

filter_trim

由于我认为这是一个常见的用例,我想知道是否有一个已经提供此功能的功能?

如果Ecto尚未提供此功能,那么从Ectos API的角度来看,添加此类功能并将其命名为filter_...-- All main categories: select * from mytable where length(nr) - length(replace(nr,'.','')) = 0 order by nr; 我会猜测是否方便?

1 个答案:

答案 0 :(得分:5)

我认为最好在运行验证之前修剪输入。此外,update_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])