我想设置一个分配,具体取决于Ecto.update禁止的特定错误,最好的方法是什么?在我的情况下,返回的变更集是:
#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>
但它也可以是:
#Ecto.Changeset<action: :update, changes: %{email: nil},
errors: [email: {"can't be blank", [validation: :required]}],
data: #Backend.AuthPersona<>, valid?: false>
我需要根据返回的错误设置一个赋值,这样我就可以激活表单中的正确选项卡。
我尝试过这样的理解:
for { :email, error } <- errors, do: error
我想我可以将返回值与case语句中的空列表进行比较,但我无法正确理解。另外:我使用正确的方法吗?
答案 0 :(得分:0)
在评论部分澄清之后,您似乎想要为变更集#{field}_error
中的每个字段创建errors
分配。这可以通过Enum.reduce
:
conn = Enum.reduce(changeset.errors, conn, fn {field, _}, conn ->
assign(conn, :"#{field}_error", true)
end)
如果您的变更集包含3个字段foo
,bar
和baz
,则上述内容与此相同:
conn = assign(conn, :foo_error, true)
conn = assign(conn, :bar_error, true)
conn = assign(conn, :baz_error, true)