0

一部のデータをコンソールからデスクトップのcsvファイルにエクスポートしようとしています。モデルにexport_csvメソッドを作成して、コンソールから実行しました

def export_csv

  csv_string = CSV.generate do |csv|
    csv << [
      'Animal', 'Subanimal'
    ]
    Animal.all.each do |animal|
      subanimals = animal.children
      unless subanimals.blank?
        subanimals.each do |subanimal|
          csv << [
            animal.name, subanimal.name
          ]
        end
      end
    end
  end


  filename = "animals_and_subanimals.csv"
  CSV.open(filename, 'w') do |csv|
    csv << csv_string
  end
end

しかし、それは壊れていて、私にこのエラーを与えています

NoMethodError: undefined method `map' for #<String:0x007f90ce247000>

私は何が間違っているのですか?

4

2 に答える 2

1

csv_stringすでにCSV形式の文字列です。次のようにディスクに書き出すだけです。

File.open(filename, 'w') {|f| f.puts csv_string}

あなたの最後のCSVブロックは、あなたを失望させているものです。

または、メモリ内に(潜在的に?)大きな文字列を作成する代わりに、ファイルを作成します。

于 2012-11-13T23:50:36.110 に答える
1

ここで、クリーンアップを試みます。

def export_csv
  filename = "animals_and_subanimals.csv"

  CSV.open(filename, 'w') do |csv|
    csv << ['Animal', 'Subanimal']
    Animal.all.each do |animal|
      subanimals = animal.children
      unless subanimals.blank?
        subanimals.each do |subanimal|
          csv << [animal.name, subanimal.name]
        end
      end
    end
  end
end
于 2012-11-14T00:58:51.300 に答える