I get different behavior when using the REPL to do a resource update that includes and after_action when I issue the same change via a GraphQL mutation.
On my resource:
update :complete do
... redacted ...
change after_action(&PhaseComplete.send/3)
end
The change code:
def secondary_action(changeset, record, _context) do
flow_phase =
Ash.get!(MyResource, changeset.data.id,
load: [:second_resource, third_resource: [:fourth_resource, fifth_resource: [:sixth_resource]]]
)
... redacted ...
{:ok, record}
end
In the REPL is simply succeeds:
Ash.get!(MyResource, "c86e8eb3-70a7-4537-8628-868d908031fd")
and then
|> MyResource.complete
I get the expected info logs that the secondary action completed.
But when using the GraphQL mutation I get:
[debug] QUERY OK db=0.1ms
rollback []
↳ Ash.Actions.Update.Bulk.run/6, at: lib/ash/actions/update/bulk.ex:243
[error] 3b72b806-0492-42a4-b101-00020723c988: Exception raised while resolving query.
** (KeyError) key :id not found in: %Ash.Changeset.OriginalDataNotAvailable{reason: :atomic_query_update}
We’ve already changed the syntax we were using and solved the problem but wanted to report this so you can either confirm that it should NOT be written the original way shown at the top of this thread, or if it’s a defect, that it can be corrected.
New syntax used:
def send(changeset, record, _context) do
my_resource =
record
|> Ash.load!([:second_resource, third_resource: [:fourth_resource, fifth_resource: [:sixth_resource]]])
... redacted ...
{:ok, record}
end