我正在使用Rails 4进行ROR项目,我必须编写一个rake任务以从excel中读取邮政编码,并将所有邮政编码与交易绑定。 Excel包含16k邮政编码。因此,对于每笔交易,我必须在第三张表(deals_zipcodes)中创建16k条记录。
我正在使用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
rake任务:
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任务工作正常,但有时会引发内存问题,并且系统挂起。 请向我提供解决方案,我该如何对其进行优化。 提前致谢。