RubyのCSVライブラリ
を使用できるようにする
config/application.rb
require 'csv'
追記後サーバーを再起動
Userの名前をCSV出力する
アプリを使っている全ユーザーの名前(name),メールアドレス(email),登録日時(created_at)をCSV出力できるようにしたい場合User.rbに次のように記述する。
models/user.rb
class User << ApplicationRecord
def self.csv_attributes
# csvデータに、どの属性をどの順番で出力するのかを定義している。
['name', 'email', 'created_at']
end
def self.generate_csv
# 最終的な戻り値がこの下の行のCSV.generateによって生成される文字列。
CSV.generate(headers: true) do |csv|
# csvデータのヘッダー情報を入れている
csv << csv_attributes
all.each do |user|
csv << csv_attributes.map{|attr| user.send(attr)}
end
end
end
end
コントローラー内でgenerate_csv
を呼び出す
CSV出力したいアクション内で下記を追記すれば全てのユーザー情報をCSVファイルに出力することができます。
Users_controller.rb
users = User.all
respond_to do |format|
format.csv { send_data @users.generate_csv, filename: "tasks-#{Time.zone.now.strftime('%Y%m%d%S')}.csv" }
end