2017-10-23 6 views
0

いくつかのActiveRecordsをCSV形式でエクスポートしたいと思います。後にいくつかのチュートリアルをチェックし、私はこれが見つかりました:問題があるルビーでCSVオブジェクトを操作する方法は?

def export_as_csv(equipments) 
    attributes = %w[id title description category_id] 
    CSV.generate(headers: true) do |csv| 
    csv << attributes 
    equipments.each do |equipment| 
     csv << equipment.attributes.values_at(*attributes) 
    end 
    return csv 
    end 
end 

を、私は私のテストでは、メモリ内のすべてを操作したい(すなわち私は、ディスク内のファイルを保存する必要はありません。)。だから、戻り値としてこのCSVオブジェクトを受け取ったとき、どのように行と列を反復処理できますか?私はPythonから来たので、私は試しました:

csv = exporter.export_as_csv(equipments) 
for row in csv: 
    foo(row) 

明らかにうまくいきませんでした。また、装置は確実にゼロではありません。 CSV形式のルールに従ってフォーマット

+1

あなたが別の行と列にアクセスする必要がある場合は、まだCSVを必要としません。配列の配列を返します。さもなければ、すぐにそれを解析するためだけにCSVを生成するのはリソースの無駄に見えます。 –

+0

実際には、私たちのプロジェクトのデータをJSONとCSVでエクスポートできるようにしたいと考えています。私がディスクに保存したくない理由は、テスト自体のためです。 – olegario

答えて

0

は、いくつかのビデオの後、私はreturnが問題であることがわかった: だから最も明白な方法は次のように、それを解析し、反復することです。 CSVを返す私はCSVオブジェクトではなく、CSVオブジェクトを受け取っていました。

0

CSV.generate戻り列。

csv = exporter.expor_as_csv(equipments) 
CSV.parse(csv).each do |line| 
    # line => ['a', 'b', 'c'] 
end 
+0

あなたの提案を実行しようとしたとき、Rubyは次のように言った: 'ArgumentError:引数の数が間違っている(与えられた2、期待される0)' – olegario

関連する問題