I’ve tried to use Ecto.Embedded as a parameterized type for schemaless changeset, when using cast it always is invalid and when using cast_embed it raises.
Not sure if it’s an error or if Ecto.Embedded isn’t supposed to be used as a parameterized type on schemaless changeset.
Examples:
embed = Ecto.ParameterizedType.init(Ecto.Embedded, cardinality: :one, on_cast: fn d, p -> cast({d, %{b: :integer}}, p, [:b]) end, on_replace: :delete, field: :a)
{%{a: %{}}, %{a: embed}}
|> cast(%{"a" => %{"b" => "5", "c" => 2}}, [])
|> cast_embed(:a)
this raises the following error:
** (ArgumentError) expected `a` to be an embed in `cast_embed`, got: `{:parameterized, {Ecto.Embedded, %Ecto.Embedded{cardinality: :one, field: :a, owner: nil, related: nil, on_cast: #Function<41.113135111/2 in :erl_eval.expr/6>, on_replace: :delete, unique: true, ordered: true}}}`
(ecto 3.13.2) lib/ecto/changeset.ex:1464: Ecto.Changeset.relation!/4
(ecto 3.13.2) lib/ecto/changeset.ex:1298: Ecto.Changeset.cast_relation/4
while if I cast:
embed = Ecto.ParameterizedType.init(Ecto.Embedded, cardinality: :one, on_cast: fn d, p -> cast({d, %{b: :integer}}, p, [:b]) end, on_replace: :delete, field: :a)
{%{a: %{}}, %{a: embed}}
|> cast(%{"a" => %{"b" => "5", "c" => 2}}, [:a])
it always have the following error:
[
a: {"is invalid",
[
type: {:parameterized,
{Ecto.Embedded,
%Ecto.Embedded{
cardinality: :one,
field: :a,
owner: nil,
related: nil,
on_cast: #Function<41.113135111/2 in :erl_eval.expr/6>,
on_replace: :delete,
unique: true,
ordered: true
}}},
validation: :cast
]}
]






















