在一个调用/查询中创建多个Rails ActiveRecord记录

cni*_*aou 4 sql activerecord ruby-on-rails

在我的一个Rails应用程序的AR类中,我最终获得了许多新初始化的ActiveRecord对象的数组.

我希望能够以一种有效的方式将它们保存到DB中,理想情况是,在一个方法调用中.目前,我将它们包含在交易中.

就像是:

Object.transaction do
  @objects.map(&:save)
end
Run Code Online (Sandbox Code Playgroud)

是否有更有效的解决方案来创建/更新记录数组?

rad*_*iel 7

您可以将所有内容包装到事务中,因为数据库只会刷新并更新一次索引.

您不能在标准SQL中的单个SQL语句中插入许多对象.MySQL可以做到这一点,但这是非默认的.我怀疑这有一个巨大的性能优势.

如果这段代码真的是时间关键,你可以异步运行它(通过将它移动到后台线程 - 注意ActiveRecord和多线程存在问题 - 或让它由工作程序执行.或者你可以手动生成SQL - AR是不是这样做的效率非常高.不过,我会去那个只有当这是非常重要的方式,而会认为这是一个黑客呢.