drapermd

drapermd

I’m finding it very difficult to figure out how to update an embedded struct that is in a nested embeds_many array.

Here’s the basic schema..

(Main row in postgres) Gathering → Activities (embeds_many Activity on Gathering) → rsvp (embeds_many ActivityRsvp on Activity)

The struggle to update the records in the rsvp collection is real. I’ve spent days reading methods to do this.

Ultimately, the insert works fine, but I can’t figure out how to make put_embed update the record.

A key difficulty was (which I believe is a bug), autogenerate_id was not working for the nested embeds_many, so I had to generate my own primary keys. This leads me to believe that this feature simply isn’t supported?

So to recap, if I bypass the error by generating my own primary key I can get insert to work fine using rsvps ++ [rcs], but I can’t get updates to work. Depending on the hack I try, I get a cornucopia of different errors. usually around get_change/6

Models:

  schema "gatherings" do
    embeds_many :activities, Activity
  end
 # Activity
  embedded_schema do
    embeds_many :rsvp, ActivityRsvp
  end
# ActivityRsvp
  embedded_schema do
    field :username, :string
    field :attending, :boolean
  end
  def change_rsvp_status_for_user(%Gathering{} = gathering, %Activity{ rsvp: rsvps } = activity, %{ username: username, attending: attending } = rsvp_params) do
    rcs = case get_rsvp_status_for_user(activity, username) do
      {:unknown, changeset} -> changeset
      {:ok, %ActivityRsvp{id: id} = r, _attendance_list} -> ActivityRsvp.changeset(r, rsvp_params)
    end

    case rcs.valid? do
     true -> acs = activity
             |> Activity.changeset
             |> put_embed(:rsvp,  [rcs])
             {:ok, a} = update_activity(gathering, acs )
             get_rsvp_status_for_user(a, username)
     false -> {:error, rcs}
    end
  end
 test/geeks/activities_test.exs:69
 ** (Ecto.NoPrimaryKeyValueError) struct `%ActivityRsvp{attending: true, comment: nil, **id: nil,** inserted_at: nil, no_show: false, updated_at: nil, username: "greybeard_prime"}` is missing primary key value
 stacktrace:
   (ecto) lib/ecto/embedded.ex:155: anonymous fn/3 in Ecto.Embedded.autogenerate_id/5

Showing Posts 1 to 1

drapermd

drapermd OP

I think I’m going to throw the towell in on this and just pull Activity into a separate table. This will change a lot of code for me, but it seems like I’m just charging up the wrong hill on this.

— All posts loaded —

Where Next? Top

Trending in Questions Top

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
water
I’m aware of 2 such projects, are there others? git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
peck
Hi everyone. My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
bradley
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
unaware8150
Hello folks! So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
Alvinkariuki
How Can I Optimise Compile Time Dependencies I have been building an elixir application for about 2 years now. Many modules and files ha...
New

Other Trending Topics Top

KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
budgie
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with. But I don’t use it anymore. Serverless was the promis...
New
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews