Nested form using inputs_for is not rendering

I have a relationship User has_one Profile. In my User

defmodule Cal.Accounts.User do
  actions do
      defaults [:read]
      create :create_user_with_profile do
        argument :profile, :map do
          allow_nil? false
        end
        change manage_relationship(:profile, type: :create)
      end
  action

  relationship do
    has_one :profile, Cal.Accounts.Profile do
        destination_attribute :user_profile_id
    end
  end
...
end

In my form liveview

  def mount(_params, _session, socket) do
    form = Cal.Accounts.form_to_create_user_with_profile()
    socket =
      socket
      |> assign(:form, to_form(form))
      |> assign(:page_title, "New User with Profile")
    {:ok, socket}
  end

  def render(assigns) do
     ...
       <h4>User</h4>
        <.input field={form[:email]} label="Email" />
        <.input field={form[:user_name]} label="Name" />
        <.input field={form[:timezone]} label="Timezone" />

        <h4>User Profile</h4>
        <.inputs_for :let={form_profile} field={@form[:profile]}>
          <.input field={form_profile[:title]} label="Title" />
          <.input field={form_profile[:location]} label="Location" />
        </.inputs_for>
   end

The form renders the Email, Name and Timezone but the fields for profile Title and Location are not

Throw a few inspects in there to see what data you’re getting in render. IIRC <prev>{inspect(@form[:profile], pretty: true)}</pre>.

%Phoenix.HTML.FormField{
  id: "form_profile",
  name: "form[profile]",
  errors: [{"is required", []}],
  field: :profile,
  form: %Phoenix.HTML.Form{
    source: #AshPhoenix.Form<
      resource: Cal.Accounts.User,
      action: :create_user_with_profile,
      type: :create,
      params: %{
        "_unused_email" => "",
        "_unused_first_name" => "",
        "_unused_last_name" => "",
        "_unused_timezone" => "",
        "_unused_user_name" => "",
        "email" => "",
        "first_name" => "",
        "last_name" => "",
        "timezone" => "Etc/UTC",
        "user_name" => ""
      },
      source: #Ash.Changeset<
        domain: Cal.Accounts,
        action_type: :create,
        action: :create_user_with_profile,
        attributes: %{timezone: "Etc/UTC"},
        relationships: %{},
        arguments: %{},
        errors: [
          %Ash.Error.Changes.Required{
            field: :profile,
            type: :argument,
            resource: Cal.Accounts.User,
            splode: nil,
            bread_crumbs: [],
            vars: [],
            path: [],
            stacktrace: #Splode.Stacktrace<>,
            class: :invalid
          }
        ],
        data: %Cal.Accounts.User{
          id: nil,
          email: nil,
          confirmed_at: nil,
          current_profile: nil,
          user_name: nil,
          first_name: nil,
          last_name: nil,
          timezone: "Etc/UTC",
          profiles_join_assoc: #Ash.NotLoaded<:relationship, field: :profiles_join_assoc>,
          profiles: #Ash.NotLoaded<:relationship, field: :profiles>,
          users: #Ash.NotLoaded<:relationship, field: :users>,
          profile: #Ash.NotLoaded<:relationship, field: :profile>,
          profileanization_users: #Ash.NotLoaded<:relationship, field: :profileanization_users>,
          valid_api_keys: #Ash.NotLoaded<:relationship, field: :valid_api_keys>,
          __meta__: #Ecto.Schema.Metadata<:built, "users">
        },
        valid?: false
      >,
      name: "form",
      data: nil,
      form_keys: [
        profile: [
          create_action: :create,
          create_resource: Cal.Accounts.Profile,
          type: :single,
          forms: [],
          sparse?: false,
          managed_relationship: {Cal.Accounts.User, :profile,
           [
             on_missing: :ignore,
             on_lookup: :ignore,
             on_no_match: {:create, :create},
             on_match: :ignore,
             type: :create
           ]},
          must_load?: false
        ]
      ],
      forms: %{},
      domain: Cal.Accounts,
      method: "post",
      submit_errors: nil,
      id: "form",
      transform_errors: nil,
      original_data: nil,
      transform_params: nil,
      prepare_params: nil,
      prepare_source: nil,
      raw_params: %{
        "_unused_email" => "",
        "_unused_first_name" => "",
        "_unused_last_name" => "",
        "_unused_timezone" => "",
        "_unused_user_name" => "",
        "email" => "",
        "first_name" => "",
        "last_name" => "",
        "timezone" => "Etc/UTC",
        "user_name" => ""
      },
      warn_on_unhandled_errors?: true,
      any_removed?: false,
      added?: false,
      changed?: false,
      touched_forms: MapSet.new(["_unused_email", "_unused_first_name",
       "_unused_last_name", "_unused_timezone", "_unused_user_name", "email",
       "first_name", "last_name", "timezone", "user_name"]),
      valid?: false,
      errors: true,
      submitted_once?: false,
      just_submitted?: false,
      ...
    >,
    impl: Phoenix.HTML.FormData.AshPhoenix.Form,
    id: "form",
    name: "form",
    data: nil,
    action: nil,
    hidden: [
      _touched: "_unused_email,_unused_first_name,_unused_last_name,_unused_timezone,_unused_user_name,email,first_name,last_name,timezone,user_name",
      _form_type: "create"
    ],
    params: %{
      "_unused_email" => "",
      "_unused_first_name" => "",
      "_unused_last_name" => "",
      "_unused_timezone" => "",
      "_unused_user_name" => "",
      "email" => "",
      "first_name" => "",
      "last_name" => "",
      "timezone" => "Etc/UTC",
      "user_name" => ""
    },
    errors: [profile: {"is required", []}],
    options: [method: "post"],
    index: nil
  },
  value: []
}

You might want to load the association.