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 end
View(ビュー)
viewには、以下のボタンを設置するだけです。
<%= link_to "CSV出力",users_path(format: :csv) %>
これで完成です。
設置したボタンを押下すれば、CSVファイルがダウンロードされます。
helpful
この記事は役に立ちましたか?