検索しても良いのがなかったので、簡単に書いてみました。
ローカルでデータをバックアップしたい時などに便利です。
※ 対象のModelがマスアサインメント可能という前提で進めます。
CSVエクスポート
Modelの検索結果をCSVに出力。
File.open('backup.csv', 'w') do |f|
csv_string = CSV.generate do |csv|
csv << User.column_names
users = User.where(id: [1..100])
users.each do |user|
csv << user.attributes.values_at(*User.column_names)
end
end
f.puts csv_string
end
CSVインポート
CSVファイルからレコードを新規作成。
CSV.foreach('backup.csv', headers: true) do |row|
User.create row.to_hash
end
リモートサーバの場合
リモートサーバだと安易にファイルを作れないと思うので、railsコンソールを立ち上げて、空のファイルに以下の結果をコピペしていく感じになると思います。
バックアップ
puts CSV.generate{|csv| csv << User.column_names}
# 結果をコピー
csv_string = CSV.generate do |csv|
users = User.where(id: [1..100])
users.each do |user|
csv << user.attributes.values_at(*User.column_names)
end
end
puts csv_string
# 結果をコピー
復元
text = 'バックアップしたCSVファイルの文字列'
csv = CSV.parse(text, headers: true)
csv.each do |row|
User.create(row.to_hash)
end