travisf
Ecto 3 put_embed not accepting structs?
In upgrading from Ecto 2 to Ecto 3 I’m dealing with a failing test. If I use ExMachina build(:address) I’ll get an error trying to put_embed/3:
** (ArgumentError) unknown field `:__meta__` in %Orders.Schemas.InlineAddress{address: #Ecto.Association.NotLoaded<association :address is not loaded>, address_id: nil, city: nil, country_code: nil, delivery_instructions: nil, full_name: nil, id: nil, inserted_at: nil, line1: nil, line2: nil, override: nil, phone_number: nil, sap_id: nil, state_or_region: nil, type: nil, updated_at: nil, version: 1, zip_code: nil}
code: exec(order: order, send_email: send_email_mock, send_csv: send_csv_mock, csv: true)
stacktrace:
(ecto 3.6.2) lib/ecto/changeset.ex:1225: Ecto.Changeset.put_change/7
(stdlib 3.17) maps.erl:410: :maps.fold_1/3
(ecto 3.6.2) lib/ecto/changeset.ex:396: Ecto.Changeset.change/2
(ecto 3.6.2) lib/ecto/changeset/relation.ex:198: Ecto.Changeset.Relation.do_change/4
(ecto 3.6.2) lib/ecto/changeset/relation.ex:326: Ecto.Changeset.Relation.single_change/5
(ecto 3.6.2) lib/ecto/changeset/relation.ex:165: Ecto.Changeset.Relation.change/3
(ecto 3.6.2) lib/ecto/changeset.ex:1213: Ecto.Changeset.put_change/7
(ecto 3.6.2) lib/ecto/changeset.ex:1423: Ecto.Changeset.put_relation/5
(packsize_data 0.0.1) ...accounting/schemas/vendor_po.ex:52: Accounting.VendorPO.changeset/2
vendor_po.ex referenced looks like:
def changeset(%VendorPO{} = po, attrs) do
po
|> cast(attrs, ~w[customer_po_number]a)
|> put_embed_from_params(:shipping_address)
end
defp put_embed_from_params(changeset, key) do
put_embed(changeset, key, changeset.params["#{key}"])
end
Changing the test to params_for(:address) works. I don’t see anything in the Ecto docs that indicates something changed, to the contrary the documentation for put_assoc/3 states:
changesets or structs - when a changeset or struct is given, they are treated as the canonical data and the associated data currently stored in the association is ignored.
First Post!
dimitarvp
Nothing comes to mind but have you tried first updating only to Ecto 3.0 just to make sure the upgrade is as minimal as possible?
Popular in Discussions
Phil just posted this on EFS:
…interesting that some of the key updates to JavaScript appear heavily influenced by (or blatantly copied...
New
Bonfire is an open source framework for building modular federated digital spaces. It’s built entirely with Elixir, including LiveView (a...
New
Just wondering what the community currently thinks, prefers, and/or recommends for working with UI components. (e.g. daisyUI, MishkaChele...
New
Hey everyone – after coming off of 3 years building with Ecto, I’ve been working non-stop on Typegres, a new query builder that strongly ...
New
I haven’t seen this paper being discussed by the community, but I think this makes Elixir more relevant than ever.
TLDR;
The paper...
New
I’ve been brainstorming about ways to solve the N-dimensional code organization problem, and am thinking about developing a Smalltalk-lik...
New
I am trying to figure out a good architecture and implementation for authZ.
Recently, I discover GitHub - open-policy-agent/opa: Open Po...
New
If so for what kind of projects? What do you think of it? :smiley:
New
I recently started a discussion about reactive patterns in Hologram, but I realized I need to step back and design the composability arch...
New
Hi,
I’m wondering is it my thinking process or this is the norm among the Elixir developer for the use of Struct and accessor functions ...
New
Other popular topics
i’m a new one to elixir
which editor can i use
vs code? or atom?
Thanks! :smiley:
New
How to handle excepions in elixir? Suppose i have A, B, C ,D, E modules. and each module has get() function. A.get() method will call th...
New
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
Hi there,
I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 record...
New
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!)
This post collects co...
New
I have a User schema with a :from_id field set to type :string:
defmodule TweetBot.Repo.Migrations.CreateUsers do
use Ecto.Migration
...
New
I tried installing
elixir 1.11.2
erlang 23.3.4
via asdf in my zsh shell. Enabled the versions locally and globally.
When I list them ...
New
Hello, I have map which I want to convert it to string like this:
the map:
%{last_name: "tavakkoli", name: "shahryar"}
the string I ne...
New
Surface is an experimental library built on top of Phoenix LiveView and its new LiveComponent API that aims to provide a more declarative...
New
by Lance Halvorsen
Elixir and Phoenix are generating tremendous excitement as an unbeatable platform for building modern web application...
New







