I guess this example illustrates the usage:
user_changeset = User.changeset(%User{}, user_params)multi =
Multi.new
|> Multi.insert(:user, user_changeset)
|> Multi.run(:address, fn %{user: user} ->
address_changeset =
%Address{user_id: user.id}
|> Address.changeset(address_params)
Repo.insert(address_changeset)
end)case Repo.transaction(multi) do
{:ok, result} ->
{:ok, jwt, _full_claims} =
Guardian.encode_and_sign(result.user, :token) conn
|> put_status(:created)
|> render(MyApp.SessionView, "create.json", jwt: jwt, user: result.user) {:error, :user, changeset, %{}} ->
conn
|> put_status(:unprocessable_entity)
|> render(MyApp.RegView, "error.json", changeset: changeset) {:error, :address, changeset, %{}} ->
conn
|> put_status(:unprocessable_entity)
|> render(MyApp.RegView, "error.json", changeset: changeset)
end






















