gpt4 book ai didi

elixir - 小写电子邮件地址并在保存前创建 MD5 和

转载 作者:行者123 更新时间:2023-12-05 08:33:41 28 4
gpt4 key购买 nike

我有一个存储电子邮件地址的 Email 模型。在保存之前,我想将 value 小写。另外,我想创建一个 MD5 和并将其保存在 md5sum 中。在 Phoenix 执行此操作最干净的方法是什么?

web/models/email.ex

defmodule MyApp.Email do
use MyApp.Web, :model

schema "emails" do
field :value, :string
field :md5sum, :string

timestamps
end

@required_fields ~w(value)
@optional_fields ~w()

@doc """
Creates a changeset based on the `model` and `params`.

If no params are provided, an invalid changeset is returned
with no validation performed.
"""
def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
end
end

最佳答案

我会创建 2 个函数并在 changeset 中通过它们进行管道传输:

def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
|> downcase_value
|> fill_md5sum
end

def downcase_value(changeset) do
update_change(changeset, :value, &String.downcase/1)
end

def fill_md5sum(changeset) do
if value = get_change(changeset, :value) do
md5sum = :crypto.hash(:md5, value)
put_change(changeset, :md5sum, md5sum)
else
changeset
end
end

演示:

iex(1)> changeset = Email.changeset(%Email{}, %{value: "FOO@EXAMPLE.COM"})
iex(2)> changeset.changes
%{md5sum: <<180, 141, 239, 100, 87, 88, 185, 85, 55, 212, 66, 76, 132, 209, 169, 255>>,
value: "foo@example.com"}

关于elixir - 小写电子邮件地址并在保存前创建 MD5 和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36966950/

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