有关联时,使用Roo导入CSV文件(规则5)

时间:2018-06-19 16:23:05

标签: ruby-on-rails roo

我一直在使用gem roo将电子表格导入到表中。一切都非常顺利,但是我现在遇到了一些问题,因为职员表中的某些列指向关联。因此,它们是整数类型。例如,在我的Staff表中,我有一个诸如state_id的列,以has_many当属关系(toy)链接到State表。

但是,我的Excel工作表中有实际的州名以及职员的姓名。我该如何解决才能成功导入数据?另一个选择是让我用相应的state_ids替换excel工作表中的状态名称,但这将使我终生难忘!

这是我的Staff模型:

class Staff < ApplicationRecord
  belongs_to :state
  .
  .
  .

def self.import(file)
spreadsheet = open_spreadsheet(file)
header = spreadsheet.row(1)
(2..spreadsheet.last_row).each do |i|
  row = Hash[[header, spreadsheet.row(i)].transpose]
  staff = find_by_id(row["id"]) || new
  staff.attributes = row.to_hash.slice(*row.to_hash.keys)
  staff.save!
  end
end

  def self.open_spreadsheet(file)
  case File.extname(file.original_filename)
  when ".csv" then Roo::CSV.new(file.path, csv_options: {encoding: "iso-8859- 
 1:utf-8"})
 when ".xls" then Roo::Excel.new(file.path, nil, :ignore)
  when ".xlsx" then Roo::Excelx.new(file.path, nil, :ignore)
  else raise "Unknown file type: #{file.original_filename}"

 end
end

结束

0 个答案:

没有答案