我正在创建一个学生数据库,并使用以下代码读取带有标题的csv文件,并将每个非标题行存储为学生对象。
class Student < ApplicationRecord
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
Student.create! row.to_hash
end
end
end
我的问题是我需要导入的csv文件可以是不同的格式。有些可能有标题组织如下:
非本科专业|名字|姓氏|上课年份|本科辅修
First_name | Last_name |专业|轻微
First_name | Last_name | Class_year
正如您所看到的,并非所有字段都可能存在,并且它们肯定可能不是相同的顺序。我怎么处理这个?
答案 0 :(得分:0)
您可以执行以下操作来映射具有属性的列:
MAP = {
"Undegraduate Major" => :major,
"First Name" => :first_name,
"Last Name" => :last_name,
"Class Year" => :class_year,
"Undergraduate Minor" => :minor,
"Major" => :major,
"Minor" => :minor,
"Class_year" => :class_year
}
CSV.foreach(file.path, headers: true) do |row|
data = {}
row.to_hash.each do |k, v|
key = MAP[k]
data[key] = v
end
Student.create! data
end