概要
何番煎じかわかりませんが、Rails で CSV を出力する方法です。
MVC を意識した、できるだけシンプルな実装を心がけました。
さっくり簡単に実装できるように情報をまとめております。
参考
実装
「ユーザ一覧画面に、CSV 出力ボタンを設置」というケースを実装してみます。
Model
CSV 出力というのはあくまで「出力」であるので、Model への変更は不要です。
View
CSV 出力用のテンプレートを作成します。
ここに CSV 出力処理を記述していきます。
app/views/users/index.csv.ruby
require 'csv'
CSV.generate do |csv|
csv_column_names = %w(Firstname Lastname Email)
csv << csv_column_names
@users.each do |user|
csv_column_values = [
user.firstname,
user.lastname,
user.email
]
csv << csv_column_values
end
end
ボタンの設置
ボタンは以下のように設置しました。ボタンの整形に Bootstrap を使っています。
app/views/users/index.html.erb
<%= link_to "CSV出力", users_path(format: :csv), class: "btn btn-primary" %>
Controller
format ごとに処理が必要でなければ、特に変更はありません。
app/controllers/users_controller.rb
class UsersController < ApplicationController
def index
@users = User.all
# format ごとに処理が必要であれば行う
# respond_to do |format|
# format.html { /* html用処理 */ }
# format.csv { /* csv用処理 */ }
# end
end
end
ファイル名指定
必要に応じて Controller で出力するファイル名を指定できます。
respond_to do |format|
format.csv do
send_data render_to_string, filename: "hoge.csv", type: :csv
end
end
なんと、これだけで動きます。超簡単!
まとめ
シンプルな CSV 出力機能は以下の3ステップで実装できます。
- View に CSV フォーマットへのリンクを追加する。
- テンプレートに
xxx.csv.ruby
を追加する。 - 追加した CSV テンプレートに出力処理を書く。
とってもらくちん!