LoginSignup
101
91

More than 5 years have passed since last update.

RailsでMVCを意識してシンプルにCSV出力

Last updated at Posted at 2015-03-17

概要

何番煎じかわかりませんが、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ステップで実装できます。

  1. View に CSV フォーマットへのリンクを追加する。
  2. テンプレートにxxx.csv.rubyを追加する。
  3. 追加した CSV テンプレートに出力処理を書く。

とってもらくちん!

101
91
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
101
91