convert array of hashes to csv file

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.


CSV is smart enough to deal with the non-uniform hashes for you. See the code for CSV::Writer#<<

So, this works, and is a bit simpler than the above examples:

CSV.open("data.csv", "wb", {headers: @data.first.keys} ) do |csv|
  @data.each do |hash|
    csv << hash
  end
end