Hi. I have implemented a manual relationship used in has_one
relationship on my Resource. It fetches the most recent commit from a git repository modeled by the Resource Commit
.
My relationship looks something like this:
# Repo.ex
has_one :most_recent_commit, Commit do
manual Relationships.MostRecentCommit
end
# Commit.ex
action :read do
primary? true
argument :ref, :string, allow_nil?: false
argument :repo_path, :string, allow_nil?: false
get?: true
end
When using:
Repo.update(repo, %{title: "Foo"}, actor: ..., load: [:most_recent_commit])
I get the following error:
%KeyError{key: :ref, term: %{}, message: nil}
(myapp 0.1.0) lib/myapp/commit/actions/read.ex:12: MyApp.Commit.Actions.Read.read/4
(ash 3.4.8) lib/ash/actions/read/read.ex:2584: Ash.Actions.Read.run_query/4
(ash 3.4.8) lib/ash/actions/read/read.ex:1032: Ash.Actions.Read.reselect_and_load/6
(ash 3.4.8) lib/ash/actions/read/read.ex:255: Ash.Actions.Read.do_run/3
(ash 3.4.8) lib/ash/actions/read/read.ex:81: anonymous fn/3 in Ash.Actions.Read.run/3
(ash 3.4.8) lib/ash.ex:1841: Ash.load/3
(ash 3.4.8) lib/ash/actions/read/relationships.ex:369: anonymous fn/5 in Ash.Actions.Read.Relationships.do_fetch_related_records/4
(ash 3.4.8) lib/ash/actions/read/relationships.ex:65: Ash.Actions.Read.Relationships.fetch_related_records/3
(ash 3.4.8) lib/ash/actions/read/relationships.ex:24: Ash.Actions.Read.Relationships.load/3
(ash 3.4.8) lib/ash/actions/read/read.ex:293: Ash.Actions.Read.do_run/3
(ash 3.4.8) lib/ash/actions/read/read.ex:81: anonymous fn/3 in Ash.Actions.Read.run/3
(ash 3.4.8) lib/ash.ex:1841: Ash.load/3
(ash 3.4.8) lib/ash/actions/update/bulk.ex:2434: Ash.Actions.Update.Bulk.load_data/5
(ash 3.4.8) lib/ash/actions/update/bulk.ex:587: Ash.Actions.Update.Bulk.do_atomic_update/5
(ash 3.4.8) lib/ash/actions/update/bulk.ex:260: Ash.Actions.Update.Bulk.run/6
(ash 3.4.8) lib/ash/actions/update/update.ex:157: Ash.Actions.Update.run/4
(ash 3.4.8) lib/ash.ex:2643: Ash.update/3
If I instead of using :load do a repo |> Ash.load!([:most_recent_commit])
after the call to update
- everything works fine.
This happens when trying to access arguments
in the query
of the ManualReadAction.
It normally these arguments would be provided by the manual relationship implementation, but it seems like the manual relationship module is skipped completely and the has_one
relationship :most_recent_commit
uses the primary read action directly on the destination resource.