mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 05:23:03 +12:00
fix: ensure that to-many relationships are loaded as lists
This commit is contained in:
parent
e50326cb56
commit
3e82d05edb
1 changed files with 45 additions and 19 deletions
|
@ -711,33 +711,59 @@ defmodule Ash.Actions.Read.Relationships do
|
||||||
Enum.map(records, fn record ->
|
Enum.map(records, fn record ->
|
||||||
value = Map.get(record, relationship.source_attribute)
|
value = Map.get(record, relationship.source_attribute)
|
||||||
|
|
||||||
Map.put(
|
if relationship.cardinality == :many do
|
||||||
record,
|
Map.put(
|
||||||
relationship.name,
|
record,
|
||||||
apply_runtime_query_operations(
|
relationship.name,
|
||||||
Map.get(related, value) || default,
|
apply_runtime_query_operations(
|
||||||
related_query
|
Map.get(related, value) || default,
|
||||||
|
related_query
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
else
|
||||||
|
Map.put(
|
||||||
|
record,
|
||||||
|
relationship.name,
|
||||||
|
apply_runtime_query_operations(
|
||||||
|
Enum.at(List.wrap(Map.get(related, value) || default), 0),
|
||||||
|
related_query
|
||||||
|
)
|
||||||
|
)
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
else
|
else
|
||||||
Enum.map(records, fn record ->
|
Enum.map(records, fn record ->
|
||||||
value = Map.get(record, relationship.source_attribute)
|
value = Map.get(record, relationship.source_attribute)
|
||||||
|
|
||||||
related
|
if relationship.cardinality == :many do
|
||||||
|> Enum.find_value(:error, fn result ->
|
related
|
||||||
destination_value = Map.get(result, relationship.destination_attribute)
|
|> Enum.filter(fn result ->
|
||||||
|
destination_value = Map.get(result, relationship.destination_attribute)
|
||||||
|
|
||||||
if Ash.Type.equal?(attribute.type, value, destination_value) do
|
Ash.Type.equal?(attribute.type, value, destination_value)
|
||||||
{:ok, result}
|
end)
|
||||||
end
|
|> then(fn result ->
|
||||||
end)
|
result =
|
||||||
|> then(fn result ->
|
apply_runtime_query_operations({:ok, result}, related_query)
|
||||||
result =
|
|
||||||
apply_runtime_query_operations(result, related_query)
|
|
||||||
|
|
||||||
put_result(record, result, relationship.name, default)
|
put_result(record, result, relationship.name, default)
|
||||||
end)
|
end)
|
||||||
|
else
|
||||||
|
related
|
||||||
|
|> Enum.find_value(:error, fn result ->
|
||||||
|
destination_value = Map.get(result, relationship.destination_attribute)
|
||||||
|
|
||||||
|
if Ash.Type.equal?(attribute.type, value, destination_value) do
|
||||||
|
{:ok, result}
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|> then(fn result ->
|
||||||
|
result =
|
||||||
|
apply_runtime_query_operations(result, related_query)
|
||||||
|
|
||||||
|
put_result(record, result, relationship.name, default)
|
||||||
|
end)
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue