#はじめに
seed内でデータを作成するのが面倒だったので、Excel(Numbers)でデータを作成し、一括でDBに読み込ませる方法をまとめました!
【環境】
私はMacを利用しているので、初期搭載されていて、無料で使えるNumbersを使用。
(重複セルを見つけい場合や複雑な処理はExcelを使用。)
#使い方
##CSVファイルを作成
- 1行目にキーとなる任意の名前をつける。(対応するDBの項目名と同じにすると分かりやすい)
- 2行目以降にデータを打ち込む。
3.データを作成したら ファイル → 書き出す → CSVを選択
##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:reset → rails db:migrate → rails db:seed でリセットをかけてみる
- CSVファイルの記載する項目名の順番と、DBの項目定義の順番を合わせてみる
例. DBの項目定義順が **title, release, production,...**なら
CSVの記載項目順も **title, release, production, ...**にする
(私の場合これで上手く入るようになりました。)
以上となりますが何か間違った情報など提供してましたらコメント欄でお伝えください!