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 回答