什么是Ruby on Rails-导入结构化逗号分隔文件然后创建记录Activerecord的方法

时间:2013-02-12 00:45:29

标签: ruby-on-rails ruby fastercsv

我有一个结构化的逗号分隔文件,它有两种记录类型。不同的记录由标题条目区分: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方式做事感兴趣。我有兴趣听听更有经验的程序员如何解决这个问题。感谢您的输入。

1 个答案:

答案 0 :(得分:0)

我建议gem 'roo'

您有一个示例源代码here,但我更喜欢看10分钟video