Logic (Account.ex)
def register_user(attrs \\ %{}) do
user = User.registration_changeset(%User{}, attrs)
Multi.new()
|> Multi.insert(:user, user)
|> Multi.insert(:avatars, fn %{user: user} ->
Avatar.changeset(user, attrs)
end)
|> Repo.transaction()
end
Schemes/Changesets (Avatar.ex)
def changeset(user, attrs \\ %{}) do
{:ok, photo} = readfile(attrs)
user
|> Ecto.build_assoc(:avatars, %{photo: photo})
|> cast(attrs, [:user_id])
|> unique_constraint(:user_id)
end