gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:22:06 24 4
gpt4 key购买 nike

Ecto 中是否有内置方法可以删除 Ecto.Changeset 中字段的尾随和前导空格?打电话时changeset/2在将其插入数据库之前?

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

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

因为我认为这是一个常见的用例,所以我想知道是否没有已经提供此功能的函数?

如果 Ecto 中尚未提供此功能,那么从 Ectos API 的角度来看,添加此类功能并将其命名为 filter_trim 会很方便。和 filter_...我猜?

最佳答案

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

关于elixir - 使用 Ecto 变更集删除尾随和前导空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49750046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com