RailsでCSVファイルのダウンロード機能を作成する

Rails で CSV ファイルのダウンロード機能の作り方を確認したので、メモがてらまとめます。

目次

参考

準備

以下のコマンドで、モデル他を作成しておきます。

1
2
3
# rails環境の準備をしていることを前提として以下を実行
bundle exec rails g scaffold user name:string family_name:string
bundle exec rails db:migrate

ここまで実行し、localhost:3000/usersにアクセスできることを確認しておく。

実装

app/views/users/index.csv.erb を新規に作成します。

app/views/users/index.csv.erb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%=
require 'csv'
csv_data = CSV.generate do |csv|
column_names = ['name','famlyname','created_at']
csv << column_names
@users.each do |user|
column_values = [
user.name,
user.family_name,
user.created_at.strftime("%Y-%m-%d")
]
csv << column_values
end
end
csv_data.encode(Encoding::SJIS)
%>

app/views/users/index.html.erb に以下を追記します。

app/views/users/index.html.erbに追記
1
<%= link_to 'download csv', users_path(format: 'csv') %>

これだけです。

確認

localhost:3000/usersにアクセスすると、download csvというリンクが確認できるはずです。

クリックすることでダウンロードできます。
ダウンロードすると以下のようになります。

users.csv
1
2
3
name,famlyname,created_at
taro,tanaka,2020-02-17
太郎,田中,2020-02-17

確認した限りだと、文字コードの指定も効いているようです。


参考にしたものだと、コントローラーにも CSV ファイルダウンロードのために手を入れていました。
今回は、ビューを一つ追加、既存のビューにリンクを追加で実現できました。
おそらく最小構成だと思います。

ではでは。