我一直在使用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
结束