I’m trying to figure out how to use cast_embed but I don’t understand what I’m doing wrong.
defmodule Operation do
use Ecto.Schema
embedded_schema do
field :amount, :integer
field :type, :string
embeds_one :item, Item
end
end
defmodule Item do
use Ecto.Schema
embedded_schema do
field :item_code, :string
field :item_name, :string
end
end
with the following data
{
"item": {
"item_code": "A1",
"item_name": "NameA1"
},
"type": "type",
"amount": 4
}
d = %{
"amount" => 4,
"item" => %{"item_code" => "A1", "item_name" => "NameA1"},
"type" => "type"
}
cast(%Operation{}, d, [:amount, :type]) |> validate_required([:amount, :type]) |> cast_embed(:item)
This throws an error:
** (UndefinedFunctionError) function Item.changeset/2 is undefined or private. Did you mean one of:
* __changeset__/0
Item.changeset(%Item{id: nil, item_code: nil, item_name: nil}, %{"item_code" => "A1", "item_name" => "NameA1"})
(ecto) lib/ecto/changeset.ex:736: anonymous fn/4 in Ecto.Changeset.on_cast_default/2
(ecto) lib/ecto/changeset/relation.ex:111: Ecto.Changeset.Relation.do_cast/5
(ecto) lib/ecto/changeset/relation.ex:292: Ecto.Changeset.Relation.single_change/5
(ecto) lib/ecto/changeset.ex:715: Ecto.Changeset.cast_relation/4
Been stuck on this for a while and I can’t find a working example of how to do this online, any ideas what I’m doing wrong here?