win*_*yer 1 elixir phoenix-framework
我有一个Email存储电子邮件地址的模型.在保存之前我想要贬低它value.另外,我想创建它的MD5总和并将其保存md5sum.凤凰城最干净的方法是什么?
网络/模型/ 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
Run Code Online (Sandbox Code Playgroud)
我将创建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
Run Code Online (Sandbox Code Playgroud)
演示:
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"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
657 次 |
| 最近记录: |