2016-08-25 51 views
1

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

使用Ecto.Multi:

  • Ecto.Multi.to_list是不是因为多可以包含Ecto.Multi.run操作的解决方案(需要在依赖的情况下,这些操作在操作之间:例如,在创建第一个用户的帐户时,我们需要在用户更改集中注入帐户ID)。

  • 由于changes_so_far参数是来自先前操作的结果而不是更改集,因此添加负责自动注入审核事件的最终Ecto.Multi.run也不可能。

使用具有匿名函数的Repo.transaction()不返回任何变更集。

回答

0

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 

这将让你保持的很好的API Ecto.Multi,同时允许您轻松地完成其他操作。