Rails Active Record - 一次保存多个对象

Ron*_*pes 3 activerecord ruby-on-rails

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

例如,我有一个项目模型,其中有很多任务。我想从一系列属性中为某个项目创建许多任务。因此,在我的项目模型中,我将有一个像这样的方法(简化示例):

def create_tasks(tasks)
   tasks.map{|t| Task.create(project: self, name: t.name)}
end
Run Code Online (Sandbox Code Playgroud)

问题是,对于每个任务,它都会对我的数据库造成影响,而对于大量记录来说,这是不希望的。我怎样才能做到这一点,以便 ActiveRecord 只对我的数据库进行一次调用?提前致谢!

Mik*_*rin 5

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

Task.transaction do
    tasks.each{ |task| Task.create(...) }
end
Run Code Online (Sandbox Code Playgroud)

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

查看transaction文档。

你也可以尝试一下accepts_nested_attributes_for

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

希望能帮助到你。