Padrinoで作ったウェブアプリケーションでCSVファイルをダウンロードさせようとした。Ruby on Railsだと以下のような感じでできる。
data=[[1, 2, 3], [4, 5, 6]]
csv=data.map{|x| x.join(",")}.join("\n")
send_data(csv,
disposition: "attachment",
type: "application/octet-stream",
filename: "foo.csv")
end
しかし、padrinoの同名のヘルパメソッドsend_dataはobsoleteされてしまったようだ。どのようなものであったかは知らないけれども。
調べてみたところ、sinatraのヘルパメソッドを使って以下のようにすると実現できることが判った。
data=[[1, 2, 3], [4, 5, 6]]
csv=data.map{|x| join(",")}.join("\n").encode("Shift_JIS")
content_type "application/octet-stream"
attachment "bar.csv"
response.write csv
ExcelをインストールしたWindowsからこのコードを含むURIにアクセスすると、Excelで直接開くこともできる。