0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】CSV出力機能を簡単に作成する

Last updated at Posted at 2024-02-06

はじめに

Railsでモデル(Item)のデータを取得しcsv出力する機能を作成する

環境

ruby 2.7.2p137
Rails 6.0.3.4

コンロトーラー

app/controllers/items_controller.rb
require 'csv'

def export_csv
  items = Item.all # 出力したいデータと取得します
  headers = ['id', 'name']
  data = CSV.generate do |csv|
    csv << headers # 1行目ヘッダーになるため、項目をheadersに代入して初めにcsvに書き込みます。
    items.each do |item|
      csv << [item.id, item.name] # 1行目にヘッダーを書き込み終えたら、2行目以降はitemsをループ処理で書き込んでいきます。この時ヘッダーの項目と出力する値が乖離しないように同じ順番にしています。
    end
  end

  send_data data, filename: "#{Time.now.strftime('%Y-%m-%d')}_item_list.csv" 
  # send_dataで作成したcsv(date)を出力します。
  # ファイル名はfilenameオプションで仕様に合わせて指定する #{Time.now.strftime('%Y-%m-%d')}には今日の日付が入る。
end

ルーティング

config/routes.rb
get 'items/export_csv', to: 'items#export_csv', as: 'item_export_csv'

ビュー

viewファイルは特に用意する必要はないので、出力ボタンを配置したいviewファイルに記述していく

app/views/item/XXXXX.html.erb
<%= link_to 'CSV ダウンロード', partner_export_list_path %> 
# このリンクをクリックするとitems#export_csvが実行されてCSVが出力される

データを取得してそのまま出力するだけであればこれで簡単に実装できます。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?