Я не буду удалять таблицы продуктов и поставщиков в каждом цикле. Это приложение для рельсов? Если так, то есть несколько действительно хороших помощников ActiveRecord, которые вам пригодятся.
Если у вас есть модель активной записи Продукта, вы можете сделать:
p = Product.find_or_initialize_by_identifier(<id you get from file>)
p.name = <name from file>
p.size = <size from file>
etc...
p.save!
find_or_initialize будет искать продукт в базе данных по указанному вами идентификатору, и если он не сможет его найти, он создаст новый. Очень удобно делать это таким образом, что ActiveRecord будет сохранять в базу данных только в том случае, если какие-либо данные были изменены, и автоматически обновляет любые поля отметок времени, которые у вас есть в таблице (updated_at) соответственно. Еще одна вещь, поскольку вы будете искать записи по идентификатору (идентификатору из файла), я обязательно добавлю индекс по этому полю в базе данных.
Чтобы выполнить задачу rake, я бы добавил файл rake в каталог lib / tasks вашего приложения rails. Мы назовем это data.rake.
Внутри data.rake это будет выглядеть примерно так:
namespace :data do
desc "import data from files to database"
task :import => :environment do
file = File.open(<file to import>)
file.each do |line|
attrs = line.split(":")
p = Product.find_or_initialize_by_identifier(attrs[0])
p.name = attrs[1]
etc...
p.save!
end
end
end
Чтобы вызвать задачу rake, используйте «rake data: import» из командной строки.