Search code examples
ruby-on-railscsvjruby

convert array of hashes to csv file


How do you convert an array of hashes to a .csv file?

I have tried

    CSV.open("data.csv", "wb") do |csv|
      @data.to_csv
    end

but it is blank


Solution

  • Try this:

    CSV.open("data.csv", "wb") do |csv|
      @data.each do |hash|
        csv << hash.values
      end
    end
    

    If you want the first line of the CSV to contain the keys of the hash (a header row), simply do:

    CSV.open("data.csv", "wb") do |csv|
      csv << @data.first.keys # adds the attributes name on the first line
      @data.each do |hash|
        csv << hash.values
      end
    end
    

    Please read the comment of @cgenco below: He wrote a monkey patch for the Array class.