LoginSignup
22
21

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-04-02

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

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

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
22
21