首页 > 解决方案 > Rails Active Record - 一次保存多个对象

问题描述

我看了一下这个问题,没有找到任何对我有用的答案。

例如,我有一个项目模型,它有很多任务。我想从一组属性中为某个项目创建许多任务。所以,在我的项目模型中,我会有这样的方法(简化示例):

def create_tasks(tasks)
   tasks.map{|t| Task.create(project: self, name: t.name)}
end

问题是,对于每项任务,它都会对我的数据库产生影响,并且对于大量不需要的记录。我该怎么做才能让 ActiveRecord 只调用一次我的数据库?提前致谢!

标签: ruby-on-railsactiverecord

解决方案


每个插入数据库的调用都将单独完成(在不同的事务中)。但是您可以减少将所有创建包含在单个事务中的总延迟。

Task.transaction do
    tasks.each{ |task| Task.create(...) }
end

在这种情况下,您的所有创作都将包装在一个原子数据库事务中。

看看transaction文档。

你也可以试试accepts_nested_attributes_for

嵌套属性允许您通过父项将属性保存在关联记录上。

希望能帮助到你。


推荐阅读