Generate live form on submit no data

Trying out Ash and LiveView together :beetle:
Using latest versions.
I generated a live view using mix ash_phoenix.gen.live and added <.input ... />, everything else is like documented/generated.
But when AshPhoenix.Form.submit(form, params: params) is run it fails, or rather it tries to insert an empty struct. Since I added allow_nil?: false on my attributes it fails. Even though params are correct it’s like they are not transfered to the changeset and an empty changeset is submitted. What could be the issue?

You’ll need to ensure that the attribute is accepted by the action you are submitting. Try adding accept [:the_attribute] to the action

1 Like

I have

  actions do
    defaults [:read, :destroy, create: :*, update: :*]
  end

so create: :* should accept all params right?

edit: I found an example on git, it could help me figure it out. I’ll post update.

create: :* accepts all public attributes. So if your attribute is not public you will need to explicitly list it. You can do that with create: [:*, :thing] (as of recent versions)

1 Like

Thanks, that was the issue. :cowboy_hat_face:
Here’s documentation for reference:
https://hexdocs.pm/ash/3.0.0-rc.19/sensitive-data.html

Also a question: Could this be improved (would it make sense), i.e. get an informative error message “fields you are action are not public”?

Hmm…yeah, so AshPhoenix passes the skip_unknown_inputs option with all of the fields it submits, so that you don’t get errors on unknown inputs. The reason it does this is because often in a form there is “extra data” used to do UI related stuff, and we don’t want that to cause an error. I think adding some kind of warning or error would make sense, but there are some edge cases where you actually can’t do anything about the extra keys in the form, and you wouldn’t be able to clear that warning or error…

I’ll have to think about it :slight_smile: clearly a bad DX there, but its one of those things that is more complex than it seems to address (within forms, if you passed these inputs in outside of a form when calling an action, you’d have gotten a clear error message).

1 Like

So if I understand correctly, too much needed for too little gained. :sweat_smile:
In short it doesn’t make sense, thanks for clarifying! :cowboy_hat_face: