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 只对我的数据库进行一次调用?提前致谢!
每次插入数据库的调用都将单独完成(在不同的事务中)。但是您可以减少将所有创建包含在单个事务中的总延迟。
Task.transaction do
tasks.each{ |task| Task.create(...) }
end
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您的所有创建都将包装在一个原子数据库事务中。
查看transaction文档。
你也可以尝试一下accepts_nested_attributes_for。
嵌套属性允许您通过父项保存关联记录上的属性。
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
2578 次 |
| 最近记录: |