我有一对多的关系,其中一个Thing
:has_many
Elements
我正在寻找一种方法来创建一个Thing及其所有N个元素而不进行N + 1个查询。我试过了:
[loop in Thing model]
self.elements.build({...})
...
self.save
但它为每个元素单独插入。
答案 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
我认为这可能是您的最佳选择。