はじめに
CarrierWaveを使用してアップロードしたcsvファイルをダウンロードする機能を実装したのでその備忘録として残そうと思います。
コントローラーの実装
コントローラーのコードは下記の感じで書きます。
hoges_controller.rb
def export_csv
@hoge = Hoge.find(params[:id])
if @hoge.csv_file.present?
send_file @hoge.csv_file.path, type: @hoge.csv_file.content_type, disposition: 'attachment'
end
end
private
def hoge
params.require(:hoge).permit(:csv_file)
end
send_fileメソッド
クライアント(ファイルを要求しているユーザーのブラウザ)にファイルを送信
path: 送信するファイルのパス
type: @hoge.csv_file.content_type
content_type はそのファイルの MIME タイプを取得するためのメソッド
deposition: 'attachment'
ブラウザに対してファイルをダウンロードするよう指示
あとは
route.rbで export_csvメソッドを実行するパスを作成して、フロントエンドでクリックしてダウンロードできるようにすればOK
感想
メソッドを覚えるだけでした。
ありがとうございました!