@@ -327,17 +327,28 @@ defmodule Kaffy.ResourceForm do
327
327
end
328
328
end
329
329
330
- def get_field_error ( form , field ) do
331
- case Keyword . get_values ( form . errors , field ) do
332
- [ { msg , _ } ] ->
333
- error_msg = Kaffy.ResourceAdmin . humanize_term ( field ) <> " " <> msg <> "!"
334
- { error_msg , "is-invalid" }
335
-
336
- _ ->
330
+ def get_field_error ( changeset , field ) do
331
+ changeset
332
+ |> build_error_messages ( )
333
+ |> Map . get ( field )
334
+ |> case do
335
+ nil ->
337
336
{ nil , "" }
337
+
338
+ messages ->
339
+ error_msg = Kaffy.ResourceAdmin . humanize_term ( field ) <> " " <> Enum . join ( messages , ", " ) <> "!"
340
+ { error_msg , "is-invalid" }
338
341
end
339
342
end
340
343
344
+ defp build_error_messages ( changeset ) do
345
+ Ecto.Changeset . traverse_errors ( changeset , fn { msg , opts } ->
346
+ Enum . reduce ( opts , msg , fn { key , value } , acc ->
347
+ String . replace ( acc , "%{#{ key } }" , to_string ( value ) )
348
+ end )
349
+ end )
350
+ end
351
+
341
352
def kaffy_input ( conn , changeset , form , field , options ) do
342
353
ft = Kaffy.ResourceSchema . field_type ( changeset . data . __struct__ , field )
343
354
@@ -346,7 +357,7 @@ defmodule Kaffy.ResourceForm do
346
357
ft . render_form ( conn , changeset , form , field , options )
347
358
348
359
false ->
349
- { error_msg , error_class } = get_field_error ( form , field )
360
+ { error_msg , error_class } = get_field_error ( changeset , field )
350
361
help_text = form_help_text ( { field , options } )
351
362
352
363
content_tag :div , class: "form-group #{ error_class } " do
0 commit comments