RailsでCSVを出力する

ruby Ruby
rails Rails
rubyonrails RubyOnRails

環境

  • 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回書かないとエラーになった。。。