CSV.generateを使って、配列の中身をCSV形式でダウンロードする
CSV.generateとは?
対象データを自動的にCSV形式に変換してくれるCSVライブラリの一種です。
テストデータの作成
今回は辞書のような配列を用意し、csvファイル作成します。
dictionary = [['犬', 'dog'], ['猫', 'cat'], ['豚', 'pig'], ['猿', 'monkey']]
CSV.generateを使って、配列をCSV形式に変換
csv = CSV.generate(force_quotes: true) { |generate_data| dictionary.each do |data| set_data = [data[0], data[1]] generate_data << set_data end } send_data csv, type: :csv, filename: "dictionary.csv"
変数(generate_data)に格納したデータ(set_data)は自動的にcsv形式に変換され、
force_quotes: true
とすることで対象のデータを"“で囲うことができます。
実際のダウンロード処理はsend_data
を使い、指定したデータをダウンロードさせ、
file_name
には自由にファイル名を指定することができます。
ここまでの処理が成功すると、このようにcsvファイルが出来上がります。
補足 文字コード変換について
CSV.generate
はencodingオプションを与えることで、ファイルの書式を文字コードを変換することができます。
# Encoding::SJISはShift_JISを表しています CSV.generate(force_quotes: true, encoding:Encoding::SJIS)
# Encoding::CP65001はutf-8を表しています CSV.generate(force_quotes: true, encoding:Encoding::CP65001)
それぞれの文字コードのエイリアスは以下のコマンド取得できます。
$ Encoding.aliases.each {|e|p e}