blset

blset

Cast_assoc with scope as 3rd parameter on changeset function

with Phoenix 1.8 generated changeset functions, with a third parameter being user_scope, how do you call cast_assoc ?

  def changeset(q, attrs, user_scope) do
    q
    |> cast(attrs, [:name])
    |> validate_required([:name])
    |> put_change(:user_id, user_scope.user.id)
    |> cast_assoc(:parts, user_scope) <<-- this does not work
  end

in parts.ex

  def changeset(part, attrs, user_scope) do
    part
    |> cast(attrs, [:name])
    |> validate_required([:name])
    |> put_change(:user_id, user_scope.user.id)
  end

do I need to implement an arity 2 changeset function ?
then tweak the param map to incorporate the user_id in it ?

like


  def embedded_changeset(part, attrs) do
    part
    |> cast(attrs, [:name,  :user_id])
    |> validate_required([:name :user_id])
  end

Marked As Solved

sabiwara

sabiwara

Elixir Core Team

I faced the same issue and fixed it using the :with option:

 def changeset(q, attrs, user_scope) do
    q
    |> cast(attrs, [:name])
    |> validate_required([:name])
    |> put_change(:user_id, user_scope.user.id)
    |> cast_assoc(:parts, with: &Part.changeset(&1, &2, user_scope))
  end

Also Liked

garrison

garrison

The default for the :with option literally just calls module.changeset/2 so I don’t see how the behavior could diverge. Of course I could be missing something.

Last Post!

garrison

garrison

I can’t find the id behavior you describe in the docs but I have always avoided cast_assoc and what you describe makes sense. Can anyone else point to either some documentation or some code which sets the foreign key of the child assocs?

Again it could also be me missing something, but passing in a :with function doesn’t seem to change anything in the code as far as I can tell, so this behavior is surprising to me.

Can you try to reproduce this on the same schemas with and without the :with option to see if it’s actually something else causing the problem?

Where Next?

Popular in Questions Top

nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
joaquinalcerro
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 records...
New
Emily
I have VueJS GUIs with the project generated using Webpack. I have Elixir modules that will need to be used by the VueJS GUIs. I forese...
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New

Other popular topics Top

electic
Hi, I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New
nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
joaquinalcerro
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 records...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
msaraiva
Surface is an experimental library built on top of Phoenix LiveView and its new LiveComponent API that aims to provide a more declarative...
564 44139 214
New
AngeloChecked
What learn first? Rust or Elixir Hi Elixir community! I’m here because i want learn a new language. I’m a junior developer and mainly i ...
New

We're in Beta

About us Mission Statement