【发布时间】:2020-12-01 11:05:01
【问题描述】:
我正在尝试解决以下问题(这是我的解析器函数的返回值,我将其传递给 resolve 宏):
{:ok,
%{
collection: nil,
errors: %{
recoverable: [
%{
__exception__: true,
__recoverable__: true,
message: %{
color: %{
exterior: ["is invalid"],
interior: ["is invalid"]
}
},
type: :vehicle_invalid
}
],
unrecoverable: []
}
}}
这会返回这个经典错误:
** (Protocol.UndefinedError) protocol String.Chars not implemented for %{color: %{exterior: ["is invalid"], interior: ["is invalid"]}} of type Map. This protocol is implemented for the following type(s): Money, Postgrex.Copy, Postgrex.Query, Floki.Selector.AttributeSelector, Floki.Selector, Floki.Selector.Functional, Floki.Selector.Combinator, Floki.Selector.PseudoClass, Decimal, Float, DateTime, Time, List, Version.Requirement, Atom, Integer, Version, Date, BitString, NaiveDateTime, URI
据我所知,它不知道如何将地图转换为字符串,但这导致了我的实际问题:
我想知道为什么顶级 errors 地图可以很好地解析,但嵌套的 messages 地图却不能,希望得到一些指导,谢谢!
注意:我们的模式是让 Ecto 样式验证错误返回到我们自己的数据下,而不是顶级 Graph 查询错误,因此使用 :ok 元组而不是解析 :error 元组
【问题讨论】:
-
您是否对错误应用了一些中间件?
schema.ex中是否有如下所示的函数:defp apply(middleware, :errors, _field, _) do? -
@PeacefulJames 感谢您的回复,一旦我意识到发生了什么,我就会在下面发布一个答案:|
标签: elixir ecto phoenix absinthe