[Ruby on Rails]CSVファイルを使い、データを一括でDBに読み込ませる方法
はじめに
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, ...にする
(私の場合これで上手く入るようになりました。)
以上となりますが何か間違った情報など提供してましたらコメント欄でお伝えください!
Author And Source
この問題について([Ruby on Rails]CSVファイルを使い、データを一括でDBに読み込ませる方法), 我々は、より多くの情報をここで見つけました https://qiita.com/kamada-enginner/items/31652499065d2579a4f4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .