Massive thanks in advance if anyone can help me!
In my def mount I create my changeset with a foreign key already in there. From printing out the changeset I can see it creates it as expected
#Ecto.Changeset<
action: nil,
changes: %{message_header_id: 1}, # THIS BIT
errors: [],
data: #DEMO.Messages<>,
valid?: true
>
But soon as my def handle_event("validate", %{"messages" => user_params}, socket) do runs it immediately gets wiped. I assume it's because I have no form entry for the foreign key in my live view form - is there a way I can get around this?
Form example:
<.form let={f} for={@changeset} phx-change="validate" phx-submit="save">
<%= label f, :message %>
<%= text_input f, :message, phx_debounce: "blur" %>
<%= error_tag f, :message %>
<div>
<%= submit "Save", phx_disable_with: "Saving..." %>
</div>
</.form>
Validate function:
def handle_event("validate", %{"messages" => user_params}, socket) do
changeset =
%Messages{}
|> Messages.changeset(user_params)
|> Map.put(:action, :insert)
IO.inspect(changeset)
{:noreply, assign(socket, changeset: changeset)}
end
# OUTPUT:
#Ecto.Changeset<
action: nil,
changes: %{message: "test"}, # message_header_id IS GONE
errors: [],
data: #DEMO.Messages<>,
valid?: true
>