Поскольку DataMapper абстрагировал «бэкэнд», стандартным поведением является вставка одной записи за раз в виде SQL (или чего бы вы ни использовали).
Предполагается, что вы используете бэкэнд SQL, напримерPostgres, вы можете вернуться к сырому SQL и сделать следующее:
x = X.first
query = "INSERT INTO xs_ys(x_id, y_id) VALUES"
vals = []
array_with_500_ys.each do |y|
vals << "(#{x.id}, #{y.id})"
end
repository.adapter.execute(query + vals.join(','));
Это создает одну «вставку», пропуская все записи для вставки.Не уверен, что это будет быстрее, но вы можете поместить его в фоновую работу, если вам нужно, чтобы приложение не тянуло время для пользователя.