Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails活动记录-一次保存多个对象_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails Rails活动记录-一次保存多个对象

Ruby on rails Rails活动记录-一次保存多个对象,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我看了一眼这个问题,没有找到任何适合我的答案 例如,我有一个项目模型,它有许多任务。我想从属性数组中创建一些项目的许多任务。因此,在我的项目模型中,我会有这样一个方法(简化示例): 问题是,对于每个任务,它都会对我的数据库产生影响,并且会对大量不需要的记录产生影响。我如何做到这一点,使ActiveRecord只对我的数据库进行一次调用? 提前谢谢 每个插入数据库的调用都将单独完成(在不同的事务中)。但是您可以减少在单个事务中包装所有创建的总延迟 Task.transaction do t

我看了一眼这个问题,没有找到任何适合我的答案

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

问题是,对于每个任务,它都会对我的数据库产生影响,并且会对大量不需要的记录产生影响。我如何做到这一点,使ActiveRecord只对我的数据库进行一次调用?
提前谢谢

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

Task.transaction do
    tasks.each{ |task| Task.create(...) }
end
在这种情况下,您的所有创建都将封装在一个原子db事务中

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

你也可以试试

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


希望能有所帮助。

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

Task.transaction do
    tasks.each{ |task| Task.create(...) }
end
在这种情况下,您的所有创建都将封装在一个原子db事务中

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

你也可以试试

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


希望有帮助。

谢谢,我会的。另外,你认为在每次插入时使用线程会好吗?另外,如果你说的是“创建”,那么它们是用于并发(而不是并行)编程的。你不会从中得到任何好处的。谢谢,我会这么做的。另外,你认为在每次插入时使用线程会好吗?另外,如果你说的是“创建”,那么它们是用于并发(而不是并行)编程的。你使用它不会得到任何好处。