Rails-6: массовый импорт HABTM производит тысячи вкладышей - PullRequest
1 голос
/ 08 апреля 2020

После нескольких часов поисков лучшей работы я пришел сюда.

У меня есть новый объект Foo, и я хочу массово назначить ему тысячи баров, которые я предварительно загрузил:

@foo = Foo.create
@bars = Bar.find_all_by_some_attribute(:a)

Какой самый быстрый способ сделать это? Я пробовал:

@foo.bars = @bars
@foo.bars << @bars

Это приводит к созданию тысяч запросов на вставку.

Есть ли способ Rails 6 (Insert_all), чтобы решить мою проблему, или у меня есть чтобы решить это с помощью драгоценного камня m2m_fast_insert или жестко закодированного SQL?

1 Ответ

0 голосов
/ 09 апреля 2020

Если у вас есть настройка таблицы соединений, например:

class Item < ActiveRecord::Base
  has_and_belongs_to_many :orders
end

class Order < ActiveRecord::Base
  has_and_belongs_to_many :items
end

class ItemsOrders < ActiveRecord::Base
  belongs_to :item
  belongs_to :order
end

Я полагаю, что вы можете вставить много ItemOrders в этом случае (или независимо от того, какая у вас модель соединения) с insert_all, что является новым в Rails 6. Если не самая лучшая ваша ставка, это какое-то количество пользовательских SQL. Я нашел другой ответ на SO, который, казалось, имел хорошую отправную точку для SQL: Какой самый быстрый способ создания массовых ассоциаций HABTM в Rails?

...