diff --git a/lib/polymorphic_embed.ex b/lib/polymorphic_embed.ex index a9c8798..119163d 100644 --- a/lib/polymorphic_embed.ex +++ b/lib/polymorphic_embed.ex @@ -86,7 +86,7 @@ defmodule PolymorphicEmbed do end end - changeset.params + (changeset.params || %{}) |> Map.fetch(to_string(field)) |> case do :error when required -> diff --git a/test/polymorphic_embed_test.exs b/test/polymorphic_embed_test.exs index f1549a5..7caa92e 100644 --- a/test/polymorphic_embed_test.exs +++ b/test/polymorphic_embed_test.exs @@ -531,6 +531,24 @@ defmodule PolymorphicEmbedTest do end end + test "cast embed after change/2 call should succeed" do + for generator <- @generators do + reminder_module = get_module(Reminder, generator) + + changeset = Ecto.Changeset.change(struct(reminder_module)) + + changeset = + if polymorphic?(generator) do + PolymorphicEmbed.cast_polymorphic_embed(changeset, :channel) + else + Ecto.Changeset.cast_embed(changeset, :channel) + end + + assert changeset.valid? + assert map_size(changeset.changes) == 0 + end + end + test "loading a nil embed" do for generator <- @generators do reminder_module = get_module(Reminder, generator)