Рассмотрим сценарий, в котором вы пытаетесь смоделировать регистрацию банковской транзакции.Транзакция имеет сумму, тип (кредит или дебет) и связана с учетной записью.
В случае добавления новой банковской транзакции я могу это сделать, и она хорошо работает:
Multi.new()
|> Multi.insert(:transaction, transaction_changeset)
|> Multi.update(:account, account_changeset)
|> Repo.transaction()
Обновление существующей банковской транзакции немного сложнее.Это потому, что пользователь может изменить не только сумму, но и аккаунт.Обновление существующей транзакции может означать удаление суммы из предыдущей учетной записи, в дополнение к добавлению суммы к текущей учетной записи.Я пробовал это, но я не уверен, как выразить то, что я пытаюсь сделать, используя Ecto.Multi
.
Multi.new()
|> Multi.update(:transaction, transaction_changeset)
|> Multi.update(:account, previous_account_changeset)
|> Multi.update(:account, current_account_changeset)
|> Repo.transaction()
Ошибка времени выполнения: учетная запись уже является членом Ecto.Multi: