##はじめに
そもそもCSVって何?という状態でしたが、CSV出力の実装をすることになったので、備忘録として残しておきます。
【バージョン】
rails 4.2
ruby 2.3.6
##やることをざっくり説明してみる
Railsのフレームワークとして、Model, View, colotrollerとありますが、実際にいじるのはviewとcontrollerです。
view => csvファイルを作成 ・ 出力ボタンの設置
controller => csvとして出力するオブジェクトを投げる ・ ファイル名を設定
やることとしてはこんな感じです。
それでは順を追って説明していきます。
##CSVファイルの作成(View)
CSVとして出力するためのファイルを作成します。
拡張子は、xxxxxxxxx.csv.ruby
というようにしておきましょう。
require 'csv'
CSV.generate do |csv|
column_names = %w(name age Email)
csv << column_names
@users.each do |user|
column_values = [
user.name,
user.age,
user.email
]
csv << column_values
end
end
※補足 %w()
は、空白で区切って配列を返すので長くなった時はわざわざ(,)をうち忘れる心配もなく便利です。
csv << column_names で表の列に入る名前を定義します。
csv << column_values で表の行に入る値を定義します。
##CSV出力ボタンを設置する(View)
<%= link_to "CSV", users_path(format: :csv), class: "btn btn-primary" %>
これでどのアクションに対してcsvを出力するかを指定します。
ここでは、users_path => usersコントローラのindexアクションになるので(普通なら)、indexアクションを実行することになります。
また、request_urlとして現在のurlを指定することもできます。
##フォーマットごとに出力内容を指定(Controller)
class UsersController < ApplicationController
def index
@users = User.all
respond_to do |format|
format.html do
#html用の処理を書く
end
format.csv do
#csv用の処理を書く
endw
end
end
end
formatごとに違う処理をしたいというわけでなければ、format
の部分は無視してOKです。
もしファイル名を変更したいとなった場合は, format.csv do
の後に続いて、以下の様に記述します。
send_data render_to_string, filename: "(ファイル名).csv", type: :csv
##おわりに
こちらの記事が超シンプルでわかりやすかったので非常に参考になりましたm(_ _)m
https://qiita.com/necojackarc/items/39e0f0c438363f7084db
こんなに簡単にできるとは思ってなかったので、記事で説明してくれた皆さんに感謝です。