# accounts.ex
def new_user_changeset(%User{} = user, attrs \\ %{}) do
user
|> User.email_changeset(attrs)
|> User.creation_changeset(attrs)
end
def update_user_changeset(%User{} = user, attrs \\ %{}) do
user
|> User.email_changeset(attrs)
|> User.update_changeset(attrs)
end
Thank you so much for guiding me in the right direction!
my solution (just for anyone who hits it in the future):
defp assign_changeset(socket, :edit), do: # ...
defp assign_changeset(socket, _), do: # ...
defp assign_changeset(socket, :validate, attrs),
do:
socket
|> assign(
:changeset,
Accounts.update_user_changeset(socket.assigns.user, attrs)
|> Map.put(:action, :validate)
)
# My validate of my form handle_event
@impl true
def handle_event("validate", %{"user" => user_params} = data, socket) do
{:noreply, socket |> assign_changeset(:validate, user_params)}
end
Just like what @al2o3cr said, my mistake was that I did not pass my changed attribute into the changeset, that was why it was always reset back to what it was.