2016-08-25 47 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,同時允許您輕鬆地完成其他操作。