2016-11-01 25 views
0

我是RoR的新手。 我要动态地从一个CSV文件添加属性,使我的代码将能够动态地读取任何csv文件,并建立了数据库(即转换任何CSV文件导入到Ruby对象)如何从csv文件动态添加属性

我用下面的代码

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的参数。

我曾经想过用发送(:attrAccessor,名字),但我不知道我怎样才能从CSV读取时,任何想法整合呢?

+0

什么属性确实你的模型有数据库? –

+0

那么这里有什么_exactly_是问题?如果你说'MyModel.create({value:10})'并且模型没有'value'字段,你期望什么? –

回答

0

你做正确,但你也可以批量上传记录

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

MyModel.create(csv_data) 

注意:如果数据将是相同的,你可以使用seeds.rb

+0

大部分的想法非常好。但它仍然更新由MyModel预定义的属性/参数。问题是,csv头从一个文件更改为另一个文件。我更新了一个例子的问题 – stepj

+0

您必须通过适当的头文件以避免错误并将值插入错误的列中 –

+0

您可以重新命名不是繁忙任务的头文件 –