gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 02:15:47 24 4
gpt4 key购买 nike

我查看了这个问题,但没有找到适合我的答案。

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

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 .

Nested attributes allow you to save attributes on associated records through the parent.

希望对您有所帮助。

关于ruby-on-rails - Rails Active Record - 一次保存多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51176255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com