LoginSignup
0
1

More than 3 years have passed since last update.

[Ruby on Rails]CSVファイルを使い、データを一括でDBに読み込ませる方法

Last updated at Posted at 2020-03-22

はじめに

seed内でデータを作成するのが面倒だったので、Excel(Numbers)でデータを作成し、一括でDBに読み込ませる方法をまとめました!

【環境】
私はMacを利用しているので、初期搭載されていて、無料で使えるNumbersを使用。
(重複セルを見つけい場合や複雑な処理はExcelを使用。)

使い方

CSVファイルを作成

  1. 1行目にキーとなる任意の名前をつける。(対応するDBの項目名と同じにすると分かりやすい)
  2. 2行目以降にデータを打ち込む。

スクリーンショット 2020-03-22 18.14.00.png

3.データを作成したら ファイル → 書き出す → CSVを選択
スクリーンショット 2020-03-22 18.25.47.png

4.案内に沿って、次へ
スクリーンショット 2020-03-22 18.31.09.png

5.ファイル名(任意)と保存先(任意)を指定して書き出す
スクリーンショット 2020-03-22 18.32.52.png

seedファイルの準備

先ほど作成したファイルをDBディレクトリの中に置く

seedファイルの編集

db/seeds.rb
require "csv" #csvファイルを読み込む為に記載

#movieをcsv経由で追加する
CSV.foreach('db/movies.csv', headers: true) do |row|
#'db/movies.csv'←先ほど作成したCSVファイルのパスを指定
# headers: true ←Numbersファイルの先頭行を読み込む
  Movie.create( #データ挿入先のテーブル名を指定
    title: row['title'],
    #title:←テーブルの項目名を指定
    #row['title']←対応するNumbersファイルの先頭行を指定
    release: row['release'],
    production: row['production'],
    screening_time: row['screening_time'],
    genre: row['genre'],
    status: row['status'],
  )
end

seedファイル読み込み

ターミナルで rails db:seed を実行

rails db:seed

コマンドを実行したら、rails c で結果を見てみよう!

上手くDBにデータが入らない場合は以下を試してみてください!

  • CSVファイルを開いてみて、1行目にキーとなる任意の名前が記載されているか、間違いがないか確認する
    (1行目にシートの名前、2行目にキーが記載されている場合がある)
  • rails db:migrate:resetrails db:migraterails db:seed でリセットをかけてみる
  • CSVファイルの記載する項目名の順番と、DBの項目定義の順番を合わせてみる
    例. DBの項目定義順が title, release, production,...なら
    CSVの記載項目順も title, release, production, ...にする
    (私の場合これで上手く入るようになりました。)

以上となりますが何か間違った情報など提供してましたらコメント欄でお伝えください!

参考
【Rails】rake seedコマンドでCSVファイルからDBに読み込ませる方法

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