2016-11-01 26 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

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