在 Ecto Elixir 中遍历错误后提取字符串

extracting strings after traversing errors in Ecto Elixir

和Ecto一样,我们有变更集,在无效变更集的情况下,我们可以根据Traverse error遍历错误。但是这给了我们一个非常复杂的JSON比如

  {
    "to_date": [
      "can't be blank"
    ],
    "title": [
      "can't be blank"
    ],
    "requested_by": [
      "can't be blank"
    ],
    "from_date": [
      "can't be blank"
    ],
    "exid": [
      "can't be blank"
    ]
  }

我们不能在 Elixir 中做一些事情,这样我们就可以得到直接的字符串,例如 "Exid can't be blank" 或对象

{
  to_date: "to_date can't be bank"
}

更新: 这是遍历错误后的结果

%{exid: ["can't be blank"], from_date: ["can't be blank"],
  requested_by: ["can't be blank"], title: ["can't be blank"],
  to_date: ["can't be blank"]}

有什么方法可以通过 Enum 得到 "exid cant be blank" 吗?

如果你想把它转换成一个字符串列表,你可以这样做:

for {key, values} <- errors, value <- values, do: "#{key} #{value}"

演示:

iex(1)> errors = %{exid: ["can't be blank", "can't be something else"], from_date: ["can't be blank"],
...(1)>   requested_by: ["can't be blank"], title: ["can't be blank"],
...(1)>   to_date: ["can't be blank"]}
%{exid: ["can't be blank", "can't be something else"],
  from_date: ["can't be blank"], requested_by: ["can't be blank"],
  title: ["can't be blank"], to_date: ["can't be blank"]}
iex(2)> for {key, values} <- errors, value <- values, do: "#{key} #{value}"
["exid can't be blank", "exid can't be something else",
 "from_date can't be blank", "requested_by can't be blank",
 "title can't be blank", "to_date can't be blank"]