fix: ensure that action_select is set on seeding data

fixes #1462
This commit is contained in:
Zach Daniel 2024-09-16 08:52:49 -04:00
parent 53a3d6fb62
commit 6340014e8b
3 changed files with 18 additions and 6 deletions

View file

@ -458,6 +458,16 @@ defmodule Ash.Changeset do
end
@doc false
def set_action_select(%{action: nil} = changeset) do
%{
changeset
| action_select:
MapSet.to_list(
Ash.Resource.Info.selected_by_default_attribute_names(changeset.resource)
)
}
end
def set_action_select(changeset) do
required =
Ash.Resource.Info.action_select(changeset.resource, changeset.action.name) || []

View file

@ -414,10 +414,12 @@ defmodule Ash.Resource.Igniter do
{:ok, _zipper} <-
Igniter.Code.List.move_to_list_item(zipper, fn zipper ->
if Igniter.Code.Tuple.tuple?(zipper) do
with {:ok, zipper} <- Igniter.Code.Tuple.tuple_elem(zipper, 0) do
case Igniter.Code.Tuple.tuple_elem(zipper, 0) do
{:ok, zipper} ->
Igniter.Code.Common.nodes_equal?(zipper, type)
else
_ -> false
_ ->
false
end
else
Igniter.Code.Common.nodes_equal?(zipper, type)

View file

@ -165,13 +165,13 @@ defmodule Ash.Seed do
defp create_via_data_layer(changeset) do
Ash.Changeset.with_hooks(changeset, fn changeset ->
Ash.DataLayer.create(changeset.resource, changeset)
Ash.DataLayer.create(changeset.resource, Ash.Changeset.set_action_select(changeset))
end)
end
defp update_via_data_layer(changeset) do
Ash.Changeset.with_hooks(changeset, fn changeset ->
Ash.DataLayer.update(changeset.resource, changeset)
Ash.DataLayer.update(changeset.resource, Ash.Changeset.set_action_select(changeset))
end)
end