Я работаю над проектом ROR с rails 4, и мне нужно написать задачу rake, чтобы прочитать почтовые индексы из Excel и связать все эти почтовые индексы со сделками.Excel содержит 16 тыс. Почтовых индексов.Итак, для каждой сделки мне нужно создать 16 тыс. Записей в третьей таблице (deal_zipcodes).
Я использую HABTM следующим образом:
class Deal < ActiveRecord::Base
has_and_belongs_to_many :zipcodes, dependent: :destroy
end
class Zipcode < ActiveRecord::Base
has_and_belongs_to_many :deals
end
рейк-задача:
task spectrum_deals: :environment do
workbook = Spreadsheet.open(Rails.root.join('public/zip_code_list.xls').to_path).worksheets.first
deals = Deal.where(service_provider_id: ServiceProvider.where(name:"Spectrum").pluck(:id))
zipcodes = Zipcode.where(code: workbook.rows.map{|a| a.to_a.first})
deals.map{|deal| deal.zipcodes.delete_all }
deals.each do |deal|
deal.zipcodes << zipcodes
puts "deal_id: #{deal.id} created"
end
puts "===============finished=============="
end
Эта задача с граблями работает нормально, но в какой-то момент возникает проблема с памятью, и система зависает.Пожалуйста, дайте мне решение, как я могу его оптимизировать.Заранее спасибо.