我们有一个身份 - 用户关系,其中一个身份可以有很多用户。有一种方法可以使用此代码将用户链接到一个身份。
from(u in ZB.User, where: u.identity_id == ^to_link_identity.id)
|> ZB.Repo.update_all(set: [identity_id: user.identity_id])
ZB.Repo.delete(to_link_identity)
有时候(大部分时间都可以正常工作)这会引发错误,因为to_link_identity
上的外键会识别出仍有用户连接到它,表明update_all
没有&#39 ; t将所有用户更新为新identity_id
。从文档(https://hexdocs.pm/ecto/Ecto.Repo.html#c:update_all/3)我没有看到捕获错误的方法。有没有更好的方法来处理这个以避免这个错误?
答案 0 :(得分:0)
按照贾斯汀伍德的建议,我提出了这个解决方案,似乎解决了这个问题。
Ecto.Multi.new()
|> Ecto.Multi.update_all(:update, from(u in ZB.User, where: u.identity_id == ^to_link_identity.id), set: [identity_id: user.identity_id])
|> Ecto.Multi.delete(:delete, to_link_identity)
|> ZB.Repo.transaction