Railsで社内システム系のWEBアプリケーションを作りました。コマンドを扱えない利用者でもデータをいつでも可視化できるようにExcelなどのおなじみのUIで閲覧できたら良いなと思い、CSV出力を試みたので、方法をを紹介します。
①CSVの出力は結構簡単
私も実は「Gemとか、configとか色々大変なんだろうな」と考えていました。しかしコントローラーで特別な処理を書く必要はありません。普段HTMLでしているように、csvはビューとして扱います。Formatが.csvに変わっただけです。Railsおそるべし。
コントローラ
まず、コントローラーではHTMLに出力するのと同じように記載すれば基本的にOKです。
def users_to_csv
@users = User.all
end
ルーティング
'admin/users.csv' => 'submit#users_to_csv'
ここまでは、DBをサーバーからビューで閲覧・操作させるときと変わりません。
特別な操作(それほど特別でもありませんが)はビューにやらせればOKです。
ビュー
拡張子は.csv.rb
ではなく.csv.ruby
でファイルを記述してください。
(リテラルを使うとより効率的にコードが書けます。)
リテラルまとめ
require 'csv'
CSV.generate do |csv|
csv_column_names = %w(氏名 アドレス 番号 ステータス)
#%w(氏名 アドレス)はrubyのリテラルの一つで、["氏名","アドレス"]と同値になります。
csv << csv_column_names
@users.each do |mic|
csv_column_values = [
user.name
user.email
user.tel
user.status
]
csv << csv_column_values
end
end
②ハマりやすい点
linkを指定する際に、format: :csv
の指定が必要です!ネットに乗っているドキュメントをみる限り、かなり詳細に記載してくれているので、エラーが出る場合ここが最多なんじゃないかなと。
CSV出力のためのリンクは以下のように指定しましょう。
<%= link_to('CSVをダウンロード','/admin/users.csv',{format: :csv}) %>
これで、PC用のブラウザでCSVファイルがダウンロードができます。UTF-8を指定している場合Excelで表示すると文字化けすることがあります。その対処方法に関しては次のリンクを参照してください。
http://global-wing.com/activity/csv_character_code.html