如何从csv文件动态添加属性

时间:2016-11-01 11:35:42

标签: ruby-on-rails ruby csv

我是RoR的新手。 我想动态添加csv文件中的属性,以便我的代码能够动态读取任何csv文件并构建db(即将任何CSV文件转换为Ruby对象)

我使用的是以下代码

csv_data = File.read('myData.csv')
csv = CSV.parse(csv_data, :headers => true, :header_converters => :symbol)

csv.each do |row|
  MyModel.create!(row.to_hash)
end

然而,对于以下示例,它将失败

myData.csv

Name,id
foo,1
bar,10 

myData2.csv

Name,value
foo,1
bar,10

这将导致myData2出错,因为该值不是MyModel中的参数

  

MyModel的未知属性'value'。

我考虑过使用send(:attrAccessor,name),但我不确定如何在阅读csv,任何想法时整合它?

1 个答案:

答案 0 :(得分:0)

您正在正确地执行此操作,但您也可以批量上传记录

csv_data = 
  CSV.read("#{Rails.root}/myData.csv", 
           headers: true,
           header_converters: :symbol
  ).map(&:to_hash)

MyModel.create(csv_data)

注意:如果数据相同,您可以使用 seeds.rb