Elixir 对Repo.update返回的变更集中的特定错误执行操作
我想根据具体的错误设置一个赋值,比如说,什么是最好的方法?在我的情况下,返回的变更集是:Elixir 对Repo.update返回的变更集中的特定错误执行操作,elixir,ecto,Elixir,Ecto,我想根据具体的错误设置一个赋值,比如说,什么是最好的方法?在我的情况下,返回的变更集是: #Ecto.Changeset<action: :update, changes: %{password: "blabla", password_bcrypt: "$2b$12$s48wU....."}, errors: [password_confirmation: {"password incorrect", [validation: :confirmation]}, pass
#Ecto.Changeset<action: :update,
changes: %{password: "blabla",
password_bcrypt: "$2b$12$s48wU....."},
errors: [password_confirmation: {"password incorrect",
[validation: :confirmation]},
password: {"should be at least %{count} character(s)",
[count: 8, validation: :length, min: 8]}], data: #Backend.AuthPersona<>,
valid?: false>
#exto.Changeset
但也可以是:
#Ecto.Changeset<action: :update, changes: %{email: nil},
errors: [email: {"can't be blank", [validation: :required]}],
data: #Backend.AuthPersona<>, valid?: false>
#exto.Changeset
我需要根据返回的错误设置分配,以便激活表单中的适当选项卡
我试过这样的理解:
for { :email, error } <- errors, do: error
对于{:email,error}在注释部分进行了说明之后,您似乎想要为变更集的errors
中存在的每个字段创建一个{field}\u error
赋值。这可以通过Enum.reduce
实现:
conn = Enum.reduce(changeset.errors, conn, fn {field, _}, conn ->
assign(conn, :"#{field}_error", true)
end)
如果变更集包含三个字段,foo
、bar
、和baz
,则上述内容相当于此:
conn = assign(conn, :foo_error, true)
conn = assign(conn, :bar_error, true)
conn = assign(conn, :baz_error, true)
您可以使用if changeset.errors[:email]do
if changeset.errors[:validation]do
等检查密钥是否存在。这就是您想要的吗?类似于conn=if changeset.errors[:email]do assign(conn,:email\u error,true)else conn
?因为我一次只能激活一个选项卡,所以可以将多个字段合并成一个cond do
。因为我是新手,我也想知道最“灵丹妙药”的方法。所以你想为错误中存在的每个字段分配\u error
?假设错误中有两个字段:email
和password
。在这种情况下,我想将email\u error
和password error
赋值为true。谢谢,这正是我想要的!