Hi there, folks. I’m struggling with this issue for quite some time… It’s with Ecto embedded schemas…
Consider the following:
Orders embeds many Items.
I have the following on the Order schema:
embeds_many :items, Schemas.Order.Item, on_replace: :delete
In the same Schema, I have created the following function:
@doc """
Updates a given `t:OPS.DataBase.Schemas.Order/0` in the
database. (Permits the update of the "items" embeded schema)
"""
@spec update_with_items(t(), map(), list(Schemas.Order.Item.t())) :: response()
def update_with_items(order, params, items) do
order
|> cast(params, @update_params)
|> put_embed(:items, items)
|> Repo.update()
end
So for a given Order, I can update some parameters on it, but also can update the list of Items.
It does update the parameters, but will not update the list of items.
Here’s a example of the list of items I’m passing to the function:
[
%OPS.DataBase.Schemas.Order.Item{
id: "4e903100-07ff-4096-b0f0-8bc88c50c630",
image: "image",
name: "item 1",
picked: false,
price: nil,
product_id: 987654,
quantity: 2,
supplier_store_id: "64ac2f41-dcf4-43d1-82b7-da994c99ba57",
title: nil,
variant_id: 99999,
variant_title: "variant_title",
vendor: "vendor"
},
%OPS.DataBase.Schemas.Order.Item{
id: "b8972930-9d94-470a-90ad-abcf67c3c57e",
image: "image",
name: "item 2",
picked: false,
price: nil,
product_id: 657321,
quantity: 2,
supplier_store_id: "454545454545",
title: nil,
variant_id: 88888,
variant_title: "variant_title",
vendor: "vendor"
}
]
This is during my tests, and it’s not updating the Items of an Order.
Note that those items contains the ID already, I don’t think those matter to be honest, but I’m about to remove them to see if it works.
I’m kinda clueless here, any help/tip will be welcome.
Thank you!