使用 Ecto 变更集删除尾随和前导空格
Remove trailing and leading whitespaces with Ecto changeset
在将 changeset/2
插入数据库之前调用 changeset/2
时,Ecto 是否有内置方法删除 Ecto.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
然后可以在 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
和 [=16= 会很方便] 我猜?
我认为最好在 运行 验证之前 trim 输入。此外,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])
在将 changeset/2
插入数据库之前调用 changeset/2
时,Ecto 是否有内置方法删除 Ecto.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
然后可以在 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
和 [=16= 会很方便] 我猜?
我认为最好在 运行 验证之前 trim 输入。此外,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])