Ruby/RailsでCSV出力・ダウンロードする
RubyでCSVを出力するコードはいくつかパターンがありますが、個人的によく利用する汎用コード。
RailsのControllerでダウンロードさせる場合は予めencodingを指定しておく。(基本的に文字コードはExcelで開くことが想定される場合はSJIS、プログラムから読み込む場合はUTF-8を指定)
require "csv"
data = CSV.generate(encoding: "SJIS") do |csv|
csv << ["column1", "column2", "column3"]
records.each do |record|
csv <<[
record.column1,
record.column2,
record.column3,
]
end
end
ダウンロードさせる場合はデータを作ってsend_dataでtext/csvにして返す。
send_data data, filename: "data.csv", type: "text/csv"
出力したデータをファイルに保存する場合は作成したデータを普通にファイルに書き込んでscpなどでダウンロードする。
File.open("/path/to/data.csv", 'w', encoding: Encoding::SJIS) do |f|
f.write(data)
end