Я работаю над проектом ROR с рельсами 4, и мне нужно написать задачу rake, чтобы читать почтовые индексы из Excel и связывать все эти почтовые индексы со сделками. Excel содержит 16 000 почтовых индексов. Итак, для каждой сделки я должен создать 16 тысяч записей в третьей таблице (deals_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
Эта задача rake работает нормально, но в какой-то момент возникает проблема с памятью, и система зависает. Пожалуйста, предоставьте мне решение, как я могу его оптимизировать. Заранее спасибо.





Есть отличные драгоценные камни, такие как активная запись-импорт или bulk_insert, которые упрощают выполнение подобных вещей, я настоятельно рекомендую использовать что-то подобное.