有没有办法让ActiveRecord进行多次插入

时间:2012-01-13 22:27:35

标签: ruby-on-rails activerecord

我有一对多的关系,其中一个Thing :has_many Elements

我正在寻找一种方法来创建一个Thing及其所有N个元素而不进行N + 1个查询。我试过了:

[loop in Thing model]
   self.elements.build({...})
...
self.save

但它为每个元素单独插入。

1 个答案:

答案 0 :(得分:2)

此功能未内置。

一个选项是使用transaction,它不会消除多个INSERT,但会在一个请求中发送所有这些,这将有助于提高性能。例如:

ActiveRecord::Base.transaction do
  1000.times { MyModel.create(options) }
end

要执行真正的批量INSERT,您要么必须编写并执行原始查询,要么使用诸如activerecord-import之前的gem(以前是ar-extensions的一部分)。文档中的一个例子:

books = []
10.times do |i| 
  books << Book.new(:name => "book #{i}")
end
Book.import books

我认为这可能是您的最佳选择。