0
votes

As in Ecto, we have changeset and in the case of invalid changeset, we can traverse errors according to Traverse error. But this gave us a very complicated JSON such as

  {
    "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"
    ]
  }

can't we do something wth that in Elixir so we can get the straight strings such as "Exid can't be blank" or such as an object

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

Update: This is the result after traversing errors

%{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"]}

is there any way to get "exid cant be blank" by using Enum?

1

1 Answers

0
votes

If you want to convert it to a list of strigs, you can do something like:

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

Demo:

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"]