Есть ли способ сделать ActiveRecord сделать несколько вставок - PullRequest
1 голос
/ 14 января 2012

У меня есть отношение один ко многим, где один Thing :has_many Elements

Я ищу способ создания вещи и всех ее N элементов без выполнения N + 1запросы.Я попытался:

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

Но он делает отдельную вставку для каждого элемента.

1 Ответ

2 голосов
/ 14 января 2012

Эта возможность не встроена.

Одним из вариантов является использование транзакции , которая не устранит несколько INSERT с, но отправит их все в одном запросе, что поможет с производительностью. Например:

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

Тем не менее, чтобы получить истинную массу INSERT, вам придется либо написать и выполнить необработанный запрос, либо использовать гем, такой как activerecord-import (ранее являвшийся частью ar-extensions) , Пример из документации:

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

Я думаю, что это может быть лучшим вариантом для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...