環境
- ruby 2.4.0
- Rails 5.0.1
実装
- ViewにCSVダウンロードのボタンを追加する
index.html.haml
=link_to('CSV Download', sample_path(@sample,format:csv))
- 呼び出されたcontrollerの処理を記述
sample_controller.rb
class SampleController < ApplicationController
before_action :set_sample, only: [:show]
def show
respond_to do |format|
format.html
format.csv do
filename = 'sample'
headers['Content-Disposition'] = "attachment; filename=\"#{filename}.csv\""
end
end
end
private
def set_sample
@sample = Sample.find(params[:id])
end
- csvを整形するための処理を記述
- ファイル名を
show.csv.haml
とする
- ファイル名を
show.csv.haml
require 'kconv'
res = ''
res << @sample.id
res << ','
res << @sample.name
...中略
res << "\r"
res << "\r"
画面から CSV Download
のリンクをクリックすると、csvがダウンロードされる。
なぜか最後に"\r"
を2回書かないとエラーになった。。。