elixir - 在单个事务中插入多个变更集
问题描述
我有这个桥表:
schema "rooms_units" do
field(:date_from, :utc_datetime)
field(:date_to, :utc_datetime)
belongs_to(:room, App.Room, primary_key: true)
belongs_to(:unit, App..Unit)
end
我有来自我的端点的地图列表,我为每个地图制作了一个变更集列表。
[
#Ecto.Changeset<
action: nil,
changes: %{
date_from: #DateTime<2016-11-03 13:23:00Z>,
date_to: #DateTime<2016-11-03 13:23:00Z>,
room_id: 255,
unit_id: 296
},
errors: [],
data: #App.RoomUnit<>,
valid?: true
#Ecto.Changeset<
action: nil,
changes: %{
date_from: #DateTime<2016-11-03 13:23:00Z>,
date_to: #DateTime<2016-11-03 13:23:00Z>,
room_id: 256,
unit_id: 296
},
errors: [],
data: #App.RoomUnit<>,
valid?: true
>
]
我想rooms_units
在单个事务中将它插入表中。
我试过了Ecto.multi.insert_all
。但它接受地图列表而不是变更集。有没有其他功能可以帮助我解决这个问题
谢谢
解决方案
MyRepo.transaction(fn ->
Enum.each(changesets, &MyRepo.update!(&1, []))
end)
推荐阅读
- ruby-on-rails - Spree vs Solidus for Shopify 类似的应用程序
- android - 错误:URI 的目标不存在:Flutter 中的“package:nanoid/generate.dart”
- java - BottomNavigation 在带有组件导航的片段中不起作用
- python-3.x - 并行 Pytest 夹具处理
- javascript - 在 owl carousel 中的项目之间添加空间
- c# - “序列没有元素”异常。错误统一,WebGL
- vscode-settings - 如何清理 AppData\Roaming\Code\Service Worker 中的 CacheStorage?
- transactions - 在事务中封装 Drop 和 Add 约束
- javascript - 我正在尝试下载一个包含 PDF 的流,我从 .NET Web API 作为客户端浏览器的提示接收回该 PDF
- php - 在 symfony 3.4 中的 EventSubscriber 中返回响应