我有一个结构化的逗号分隔文件,它有两种记录类型。不同的记录由标题条目区分:H 或 P。文件格式如下:
"H","USA","MD","20904"
"P","1","A","Female","W"
"P","2","A","Male","H"
我想导入文件,然后使用导入的数据创建 activerecord 模型。我使用的方法是创建一个包含字段数、对象名称和列数的字段映射。
然后我利用现场地图
$field_map =
{
'H' =>
{
:count => 4,
:object => :Header,
:cols => [:record_type, :country_id, :state, :zip]
},
'R' =>
{
:count => 4,
:object => :RaceData,
:cols => [:record_type, :household_size, :gender, :race]
}
}
然后我使用 FastCSV 导入文件并使用 case 语句来说明文件将如何转换,然后在 activerecord create 语句中使用。
FasterCSV.foreach(filename) do |row|
tbl_type = row[0]
tbl_info = $field_map[tbl_type]
unless (tbl_info.nil?)
field_no = tbl_info[:count]
object = tbl_info[:object]
columns = tbl_info[:cols]
record_type = new_record[:record_type]
case record_type
when "H"
factory_build_h_record(new_record)
when "P"
factory_build_p_record(new_record)
end
end
end
由于篇幅限制,总结了上面的代码。我的方法工作得很好,但是我对 ruby 很陌生,而且我总是对最佳实践和“真正的”Ruby 做事方式感兴趣。我很想听听更有经验的程序员如何解决这个问题。感谢您的输入。