Ecto:检索事务期间所有已执行的变更集

Ecto: Retrieve all executed changesets during a transaction

对于给定的 Ecto 事务,如何改进它以自动添加 SQL 插入以记录执行的变更集中的所有更改值?以下是不成功的尝试:

使用Ecto.Multi:

将 Repo.transaction() 与匿名函数一起使用不会 return 任何变更集。

来自https://groups.google.com/forum/#!topic/elixir-ecto/5M6VA8fg364

目前没有这样的功能,我不赞成添加它 - 这可以在今天实现,而无需对 API 进行任何更改。 如果我要创建一个这样做的系统,我很可能会将 Ecto.Multi 函数包装在我自己的函数中,以添加额外的跟踪 - 例如:

defmodule MyApp.Multi do 

  def insert(multi, name, changeset) do 
    multi 
    |> Ecto.Multi.insert(name, changeset) 
    |> Ecto.Multi.insert({:log, name}, build_log(changeset)) 
  end 
end 

这将允许您保留 Ecto.Multi 的 API,同时允许您轻松地执行其他操作。