2016-11-01 23 views
0

RoRを初めて使用しています。 は、私は私のコードが動的に任意のCSVファイルを読み込み、DBを構築することが可能であろうように、動的に(つまり、任意のCSVは、Rubyのオブジェクトにファイルを変換する)csvファイルから属性を動的に追加する方法

私は以下のコード

を使用していた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 

値がmymodelという

にmymodelというため

不明な属性 'の値' パラメータではありませんので、それはmyData2のエラーが発生します。

私はsend(:attrAccessor、name)を使用することを考えましたが、どのように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) 

NOTEレコードを一括アップロードすることができます。データが同じであることを行っている場合は、seeds.rb

+0

バルクのアイデアは本当に良いです。しかし、MyModelによってあらかじめ定義された属性/パラメータは更新されます。問題は、csvヘッダーがあるファイルから別のファイルに変更されることです。例の質問を更新しました – stepj

+0

エラーを避け、不正な列に値を挿入するには、適切なヘッダを渡す必要があります –

+0

忙しい仕事ではないヘッダの名前を変更することができます –

関連する問題