2012-11-13 21 views
0

我想從控制檯導出一些數據到我的桌面上的csv文件。我在我的模型創建的方法EXPORT_CSV從控制檯我的導出csvs方法有什麼問題?

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> 

我在做什麼錯?

回答

1

csv_string已經是CSV格式的字符串。只需將它寫入磁盤,如下所示:

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

您的最後一個CSV塊是什麼讓你失望。

或者,您可以隨意創建文件,而不是在內存中建立(可能是?)大字符串。

+0

謝謝!現在錯誤消失了,但是在控制檯中,它顯示它找到所有數據,然後在最後返回nil。我不知道應該發生什麼,但沒有保存對話框或文件存儲在我的本地機器上的任何地方。 – Fralcon

+0

你最終沒有在任何地方出現'animals_and_subanimals.csv'嗎?你應該... –

+0

明白了,謝謝 – Fralcon

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 
+0

不錯,乾淨,謝謝你幫我改進代碼。 – Fralcon