2012-01-13 16 views
1

を間に合わせるためにそこの方法です私はやってなくてシングとそのすべてのN要素を作成する方法を探しています1 Thing:has_manyElementsはActiveRecordのは、複数の挿入

1対多の関係を持っていますN + 1個のクエリ。私が試した:

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

しかし、それは各要素に対して別々の挿入を行います。

答えて

2

この機能が内蔵されていません。

1つのオプションは、複数のINSERT秒を排除しませんが、パフォーマンス、いくつかの助けになるだろう一つのリクエストにそれらのすべてを送信しますtransactionを使用することです。たとえば:

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

が真のバルクINSERTを行うには、しかし、あなたは書いて、生のクエリを実行し、または宝石のようなactiverecord-import(AR-の拡張機能の以前の部分)を使用する必要がありますどちらか。ドキュメントの例:

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

これはあなたにとって最適な選択肢だと思います。