ruby-on-rails - Rails Active Record - 一次保存多个对象
问题描述
我看了一下这个问题,没有找到任何对我有用的答案。
例如,我有一个项目模型,它有很多任务。我想从一组属性中为某个项目创建许多任务。所以,在我的项目模型中,我会有这样的方法(简化示例):
def create_tasks(tasks)
tasks.map{|t| Task.create(project: self, name: t.name)}
end
问题是,对于每项任务,它都会对我的数据库产生影响,并且对于大量不需要的记录。我该怎么做才能让 ActiveRecord 只调用一次我的数据库?提前致谢!
解决方案
每个插入数据库的调用都将单独完成(在不同的事务中)。但是您可以减少将所有创建包含在单个事务中的总延迟。
Task.transaction do
tasks.each{ |task| Task.create(...) }
end
在这种情况下,您的所有创作都将包装在一个原子数据库事务中。
看看transaction
文档。
你也可以试试accepts_nested_attributes_for
。
嵌套属性允许您通过父项将属性保存在关联记录上。
希望能帮助到你。
推荐阅读
- javascript - 使用地图的Javascript没有提供所需的输出,因为它没有对它们进行分组
- reactjs - 推断我的对象接口以键入“对象”
- file - CPP 试图将 HEX 写入可执行文件
- javascript - 当一个流依赖于另一个流时,如何处理 node.js 流的情况?
- android - 使用 Jetpack Compose 导航时无法创建视图模型实例
- c# - c#rest api只获取第一个值参数列表
- elasticsearch - 弹性搜索查询 聚合上的分页帮助
- c - 如何将结构中的变量从整数更改为字符串?
- c++ - C++20-ranges:重用过滤视图
- python - OpenPyXL - 是否可以将输入消息添加到数据验证列表?