Railsで簡単にCSVファイルを出力する方法
Ruby on RailsのCSV出力のライブラリである「CSV.generate」を使用し、CSVファイルを出力する方法を紹介します。
スポンサーリンク
本記事では、次のような一覧画面に「CSV出力」ボタンを配置して、「CSV出力」ボタンを押下するとCSVファイルをダウンロードする処理を実装しています。
[例:一覧画面イメージ]

[例:CSVファイル]


それでは、実際にソースコードを書いてみましょう。
Controller (コントローラー)
[app/controllers/users_controller.rb]
require 'csv'
class UsersController < ApplicationController
# GET /users
# GET /users.json
def index
@users = User.all
respond_to do |format|
format.html
format.csv do |csv|
send_users_csv(@users)
end
end
end
def send_users_csv(users)
csv_data = CSV.generate(row_sep: "\r\n", encoding:Encoding::CP932) do |csv|
header = %w(名前 住所 電話番号 性別 メールアドレス メール受信)
csv << header
users.each do |user|
values = [user.name,user.address,user.phone,user.sex,user.mail_address,user.email_permission]
csv << values
end
end
send_data(csv_data, filename: "users.csv")
end
end
まず「respond_to」を利用して「format」に「csv」が指定された場合は、「send_users_csv」メソッドを呼び出し、
respond_to do |format|
format.html
format.csv do |csv|
send_users_csv(@users)
end
end
「send_users_csv」メソッド内では「CSV.generate」を利用してCSVファイルのヘッダ部とデータ部を生成しています。
※今回の例では、文字コード「MS932(Shift_JIS)」、改行コード「CRLF」を指定。
csv_data = CSV.generate(row_sep: "\r\n", encoding:Encoding::CP932) do |csv|
header = %w(名前 住所 電話番号 性別 メールアドレス メール受信)
csv << header
users.each do |user|
values = [user.name,user.address,user.phone,user.sex,user.mail_address,user.email_permission]
csv << values
end
endView(ビュー)
viewには、以下のボタンを設置するだけです。
<%= link_to "CSV出力",users_path(format: :csv) %>

これで完成です。
設置したボタンを押下すれば、CSVファイルがダウンロードされます。
helpful
この記事は役に立ちましたか?
