Rails
CSV
model

Rails の検索結果を CSV ファイルとして出力 → CSVファイルからレコード作成

More than 3 years have passed since last update.

検索しても良いのがなかったので、簡単に書いてみました。
ローカルでデータをバックアップしたい時などに便利です。

※ 対象の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