I’m building a “learning app” using the PETAL stack and it’s taxing some of the grey cells that haven’t worked since I was working with Ruby on Rails many years ago.
It’s hit a point where I need to insert two associated records at the same time. I am sure this involves Ecto.Multi
but I’m also trying to understand how to build the form since the form_for
expects an Ecto.Changeset
and so far as I can see these are schema specific. Or, at least, in all the examples I’ve seen so far they have been.
I make a lot of introductions by email so I decided to build a little helper application to make it easier for me. My schema at the moment is quite simple:
Contact <-> Role <-> Company
At the moment I have a very simple CRUD approach where you create Contacts and Companies separately. But, of course, in practice when I create a Contact I want to create the Company and specify the Role at the same time. And that’s where I run into a problem. The common pattern is something like:
def new(conn, _params) do
changeset = Introductions.change_contact(%Contact{})
render(conn, "new.html", changeset: changeset)
end
In this case we are creating an Ecto.Changeset
corresponding to a new Contact. Later when we want to build a form to edit the details we have:
<%= form_for @changeset, @action, fn f -> %>
Where the form relates the fields of the schema to the fields in the form.
So the question is how you create a “blended” or “nested” Changeset that can contain the details of each of the 3 schemas at work.
I’ve not seen any examples covering this case. I’m muddling my way through it but it would be great to have something to work from.