0

csv ファイルをデータベースにインポートしたいと考えています。Ruby 1.8.7 と Rails 3.2.13 と gem 'csv_importer' を使用しています。

csv ファイルから productname と release_date を取得します

私のコントローラーで

 def import
        csv_text = File.read('test.csv')
        csv = CSV.parse(csv_text, :headers => true)
        csv.each do |row|
            puts row  #getting entire values from csv 
            puts row['productname'] #getting error
 end  

行/行[0]を出力すると、csvファイルから値全体を次のように取得しています

製品名,リリース日

xxx,yyy

私のログで。

行 ['productname'] を出力すると、文字列を整数に変換できないというエラーが発生します。

このエラーを修正するにはどうすればよいですか?

4

2 に答える 2

0

http://ruby-doc.org/stdlib-1.8.7/libdoc/csv/rdoc/CSV.html#method-c-parseから:

CSV.parse(str_or_readable, fs = nil, rs = nil, &block)

指定された文字列またはストリームから行を解析します。行を配列の配列として返します。

...だからrowあなたの場合はArray. 引数としてString` を取るため、エラーが発生しますArray[]Integer, not a

言い換えると; row['anything']は機能しませんがrow[0]row[1]行の列 1 と 2 の値が得られます。

さて、あなたの場合、実際には次CSV.parseのように呼び出しています。

CSV.parse(csv_text, :headers => true)

ドキュメントを見ると、 の 2 番目の引数CSV.parseがフィールド セパレータであることがわかります。:headers => trueフィールド区切りとして渡しています。これはCSV、文字列に遭遇するたびに各行を分割するように指示します"headerstrue"-そうではないため、各行を分割しません。

2 番目の引数を削除すると、CSV.parse期待するものに近づくはずです。

于 2013-09-19T19:35:27.680 に答える