form #=> %Phoenix.HTML.Form{ source: #AshPhoenix.Form< resource: Marge.AshDomains.Members.MembershipPurchase, action: :create, type: :create, params: %{ "member_purchase_infos" => %{ "0" => %{ "_form_type" => "create", "_persistent_id" => "0", "_touched" => "_form_type,_touched,can_email,membership_type,start_date", "_unused_can_email" => "", "_unused_can_volunteer" => "", "_unused_email" => "", "_unused_first_name" => "", "_unused_last_name" => "", "can_email" => "true", "can_volunteer" => "false", "date_of_birth" => "2025-11-05", "email" => "", "first_name" => "", "last_name" => "", "membership_type" => "adult", "start_date" => "2025-11-17" } } }, source: #Ash.Changeset< domain: Ash.EmbeddableType.ShadowDomain, action_type: :create, action: :create, attributes: %{}, relationships: %{}, errors: [ %Ash.Error.Changes.Required{ field: :waiver_signature, type: :attribute, resource: Marge.AshDomains.Members.MembershipPurchase, splode: nil, bread_crumbs: [], vars: [], path: [], stacktrace: #Splode.Stacktrace<>, class: :invalid }, %Ash.Error.Changes.Required{ field: :primary_member_email, type: :attribute, resource: Marge.AshDomains.Members.MembershipPurchase, splode: nil, bread_crumbs: [], vars: [], path: [], stacktrace: #Splode.Stacktrace<>, class: :invalid }, %Ash.Error.Changes.InvalidAttribute{ field: :first_name, message: "must be present", private_vars: nil, value: nil, splode: Ash.Error, bread_crumbs: ["Exception raised in bulk create: Marge.AshDomains.Members.MemberPurchaseInfo.create"], vars: [ fields: [:first_name], keys: "first_name", attributes: [:first_name], exactly: 1 ], path: [:member_purchase_infos], stacktrace: #Splode.Stacktrace<>, class: :invalid }, %Ash.Error.Changes.InvalidAttribute{ field: :last_name, message: "must be present", private_vars: nil, value: nil, splode: Ash.Error, bread_crumbs: ["Exception raised in bulk create: Marge.AshDomains.Members.MemberPurchaseInfo.create"], vars: [ fields: [:last_name], keys: "last_name", attributes: [:last_name], exactly: 1 ], path: [:member_purchase_infos], stacktrace: #Splode.Stacktrace<>, class: :invalid }, %Ash.Error.Unknown.UnknownError{ error: "Age cannot be less than 18", field: nil, value: [field: :date_of_birth, message: "Age cannot be less than 18"], splode: Ash.Error, bread_crumbs: ["Exception raised in bulk create: Marge.AshDomains.Members.MemberPurchaseInfo.create"], vars: [], path: [:member_purchase_infos], stacktrace: #Splode.Stacktrace<>, class: :unknown } ], data: %Marge.AshDomains.Members.MembershipPurchase{ __meta__: #Ecto.Schema.Metadata<:built, "">, primary_member_email: nil, waiver_signature: nil, member_purchase_infos: nil }, valid?: false >, name: "membership_purchase", data: nil, form_keys: [ member_purchase_infos: [ type: :list, resource: Marge.AshDomains.Members.MemberPurchaseInfo, create_action: :create, update_action: :update, embed?: true, data: #Function<40.101098749/1 in AshPhoenix.Form.Auto.embedded/3>, forms: [] ] ], forms: %{ member_purchase_infos: [ #AshPhoenix.Form< resource: Marge.AshDomains.Members.MemberPurchaseInfo, action: :create, type: :create, params: %{ "_form_type" => "create", "_persistent_id" => "0", "_touched" => "_form_type,_touched,can_email,membership_type,start_date", "_unused_can_email" => "", "_unused_can_volunteer" => "", "_unused_email" => "", "_unused_first_name" => "", "_unused_last_name" => "", "can_email" => "true", "can_volunteer" => "false", "date_of_birth" => "2025-11-05", "email" => "", "first_name" => "", "last_name" => "", "membership_type" => "adult", "start_date" => "2025-11-17" }, source: #Ash.Changeset< domain: Ash.EmbeddableType.ShadowDomain, action_type: :create, action: :create, attributes: %{ first_name: nil, last_name: nil, email: nil, start_date: ~D[2025-11-17], date_of_birth: ~D[2025-11-05], membership_type: :adult, can_email: true, can_volunteer: false }, relationships: %{}, errors: [ %Ash.Error.Changes.InvalidAttribute{ field: :date_of_birth, message: "Age cannot be less than 18", private_vars: nil, value: nil, splode: Ash.Error, bread_crumbs: [], vars: [], path: [], stacktrace: #Splode.Stacktrace<>, class: :invalid }, %Ash.Error.Changes.InvalidAttribute{ field: :last_name, message: "must be present", private_vars: nil, value: nil, splode: Ash.Error, bread_crumbs: [], vars: [ fields: [:last_name], keys: "last_name", attributes: [:last_name], exactly: 1 ], path: [], stacktrace: #Splode.Stacktrace<>, class: :invalid }, %Ash.Error.Changes.InvalidAttribute{ field: :first_name, message: "must be present", private_vars: nil, value: nil, splode: Ash.Error, bread_crumbs: [], vars: [ fields: [:first_name], keys: "first_name", attributes: [:first_name], exactly: 1 ], path: [], stacktrace: #Splode.Stacktrace<>, class: :invalid } ], data: %Marge.AshDomains.Members.MemberPurchaseInfo{ __meta__: #Ecto.Schema.Metadata<:built, "">, membership_type: nil, start_date: nil, first_name: nil, last_name: nil, date_of_birth: nil, email: nil, can_email: false, can_volunteer: false }, valid?: false >, name: "membership_purchase[member_purchase_infos][0]", data: nil, form_keys: [], forms: %{}, domain: Ash.EmbeddableType.ShadowDomain, method: "post", submit_errors: nil, id: "membership_purchase_member_purchase_infos_0", transform_errors: nil, original_data: nil, transform_params: nil, prepare_params: nil, prepare_source: nil, raw_params: %{ "_form_type" => "create", "_persistent_id" => "0", "_touched" => "_form_type,_touched,can_email,membership_type,start_date", "_unused_can_email" => "", "_unused_can_volunteer" => "", "_unused_email" => "", "_unused_first_name" => "", "_unused_last_name" => "", "can_email" => "true", "can_volunteer" => "false", "date_of_birth" => "2025-11-05", "email" => "", "first_name" => "", "last_name" => "", "membership_type" => "adult", "start_date" => "2025-11-17" }, warn_on_unhandled_errors?: true, any_removed?: false, added?: true, changed?: true, touched_forms: MapSet.new(["_form_type", "_persistent_id", "_touched", "_unused_can_email", "_unused_can_volunteer", "_unused_email", "_unused_first_name", "_unused_last_name", "can_email", "can_volunteer", "date_of_birth", "email", "first_name", "last_name", ...]), valid?: false, errors: true, submitted_once?: false, just_submitted?: false, ... > ] }, domain: Ash.EmbeddableType.ShadowDomain, method: "post", submit_errors: nil, id: "membership_purchase", transform_errors: nil, original_data: nil, transform_params: nil, prepare_params: nil, prepare_source: nil, raw_params: %{ "member_purchase_infos" => %{ "0" => %{ "_form_type" => "create", "_persistent_id" => "0", "_touched" => "_form_type,_touched,can_email,membership_type,start_date", "_unused_can_email" => "", "_unused_can_volunteer" => "", "_unused_email" => "", "_unused_first_name" => "", "_unused_last_name" => "", "can_email" => "true", "can_volunteer" => "false", "date_of_birth" => "2025-11-05", "email" => "", "first_name" => "", "last_name" => "", "membership_type" => "adult", "start_date" => "2025-11-17" } } }, warn_on_unhandled_errors?: true, any_removed?: false, added?: false, changed?: true, touched_forms: MapSet.new(["_form_type", "_touched", "member_purchase_infos"]), valid?: false, errors: true, submitted_once?: false, just_submitted?: false, ... >, impl: Phoenix.HTML.FormData.AshPhoenix.Form, id: "membership_purchase", name: "membership_purchase", data: nil, action: nil, hidden: [ _touched: "_form_type,_touched,member_purchase_infos", _form_type: "create" ], params: %{ "member_purchase_infos" => %{ "0" => %{ "_form_type" => "create", "_persistent_id" => "0", "_touched" => "_form_type,_touched,can_email,membership_type,start_date", "_unused_can_email" => "", "_unused_can_volunteer" => "", "_unused_email" => "", "_unused_first_name" => "", "_unused_last_name" => "", "can_email" => "true", "can_volunteer" => "false", "date_of_birth" => "2025-11-05", "email" => "", "first_name" => "", "last_name" => "", "membership_type" => "adult", "start_date" => "2025-11-17" } } }, errors: [ waiver_signature: {"is required", []}, primary_member_email: {"is required", []}, member_purchase_infos: {"must be present", [keys: "first_name", exactly: 1]}, member_purchase_infos: {"must be present", [keys: "last_name", exactly: 1]} ], options: [method: "post"], index: nil }