Sangresz

Sangresz

I did ask a related question some time ago and now i face some more issues about that.

This piece of code no longer works

defp upsert_via_data_layer(changeset, identities) do
    changeset.resource
    |> Ash.DataLayer.data_layer()
    |> Code.ensure_loaded!()

    Ash.DataLayer.upsert(changeset.resource, changeset, identities)
end

When i execute it i get an object with all fields set as nil.
Could the problem be that some of the fields that i want to write have writable? false?
How could i bypass this problem?

Showing Posts 1 to 6

zachdaniel

zachdaniel

Creator of Ash

Right, so we don’t expect this sort of thing to be done TBH. In this case, a feature was added to prevent data layers from selecting unnecessary fields. I will tell you how to solve the immediate issue, but I’d advise not doing it the way you are doing it in general.

defp upsert_via_data_layer(changeset, identities) do
    changeset.resource
    |> Ash.DataLayer.data_layer()
    |> Code.ensure_loaded!()

   changeset = Ash.Changeset.set_action_select(changeset)

    Ash.DataLayer.upsert(changeset.resource, changeset, identities)
end
Sangresz

Sangresz OP

Thank you :heart:! That works.

Right, so we don’t expect this sort of thing to be done TBH

You mean bypassing the actions?
So the correct way to seed would be to specify in every resource a new action?
If so how would i be able to call the relative action in a general way like this Ash.DataLayer.upsert(changeset.resource, changeset, identities)?

zachdaniel

zachdaniel

Creator of Ash

Have you looked into Ash.Seed? Ash.Seed — ash v3.29.3

Sangresz

Sangresz OP

I tried it out last evening but didnt find a way to do an upsert with it.
Ash.Seed.seed! fails because i have an identity on the email.
Ash.Seed.update! fails too because i could not have anything on the db.

This is what managed to work for me

If you think that an upsert! function is something that could come in handy like in my case i can work on a quick pr to add this method to the Ash.Seed module

zachdaniel

zachdaniel

Creator of Ash

I would accept an upsert function in Ash.Seed yes :slight_smile:

Sangresz

Sangresz OP

Awesome, i made a pr regarding this. You can find it here!

— All posts loaded —

Where Next? Top

Trending in Questions Top

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
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
Cxx-mlr
I’m working on a small exercise involving update_in/3, and I came up with this solution: data = %{ name: "Periodic Table", category:...
New
ChrisAmelia
I’ve got trouble wrapping my head around the order in which functions are called in this snippet (from Phoenix’s authentication): toke...
New
dillonoconnor
Is there any way to avoid the Hologram compiler running when using iex? It seems like the front-end code could potentially be disregarded...
New
thiagogsr
** (ArgumentError) expected :max_attempts to be a positive integer, got: {:@, [line: 10, column: 19], [{:max_attempts, [line: 10, column:...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
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
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews