CSV を利用する Rake タスク
CSV を利用する Rake タスク
CSV
を使ってモデルのデータを更新する rake
タスクを作ってみる。
db/fixtures/csv/transfer_player.csv
id, team
1, 川崎フロンター
2, ヴィッセル神
3, 浦和レッ
# lib/tasks/transfer_player.rake
# frozen_string_literal: true
require 'csv'
namespace :transfer_player do
desc '移籍した選手の選手名を "選手名(移籍先)" に変更'
task name_and_destination: :environment do
csv = Rails.root.join('db', 'fixtures', 'csv', 'transfer_player.csv')
ActiveRecord::Base.transaction do
CSV.foreach(csv, headers: true) do |data|
player = Player.find(data['id'])
player.update!(name: "#{player.name}(#{data['team']})") unless player.name.include?('(')
puts "#{player.id}: #{player.name}"
end
end
end
end
CSV.foreach(csv, headers: true)
で CSV
の中身を取れる。
CSV.foreach(csv, headers: true) do |data|
player = Player.find(data['id'])
...
end
上記のように書くと、CSV
の各行の値が data
に入ってくる。
data['id']
や data['team']
で、CSV
の 1 行目に書いている項目に当てはまるものを取れる。
参考
- 先輩のコード