LoginSignup
41
43

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-03-30

サービスを作っていく際にCSVファイルをseedコマンドで読み込ませたかったので後で自分でも見返せるよう書いていきます。

CSVファイルとは

CSV = Comma-Separated Values
見辛いかもしれませんがカラムのデータがカンマ(,)で区切られたテキストファイルまたはデータのことです。
詳しくは分からないので深く知りたい方は調べてみてください。

スクリーンショット 2019-03-29 18.19.24.png

ちなみにVsCodeを使っているかたはExcel viwerという便利な拡張機能があるのでインストールしてみるとCSVファイルが見えやすくなります。
https://marketplace.visualstudio.com/items?itemName=GrapeCity.gc-excelviewer
こんな感じです↓
スクリーンショット 2019-03-29 18.19.33.png

本題から少し脱線してしまいましたが順を追って説明していきます。

CSVファイルを作成

macを使っている方ならnumbersというアプリでcsvファイルを簡単に作成する事が出来ます。

Excelでもメモ帳でもテキストエディタと呼ばれるものならなんでも作成可能みたいです

自分はMacを使っているのでnumbersを使った作成方法を紹介していきます。

まずエディタを開きます
スクリーンショット 2019-03-29 18.41.58.png

自分の入れたいデータを打ち込んで行きましょう。
私はサンプルCSVを拾ってきたもので編集をしていないですがファイルの一番上の行ではカラム名を入れましょう。
例えば都道府県コードはただのidに都道府県名はprefectureなどにしてカラム名は任意に入れましょう。
スクリーンショット 2019-03-29 18.46.45.png

データの入力が終わったらcsv形式にして保存しましょう。
画像のように「ファイル」→「書き出す」→「CSV」と選択していくだけです!
スクリーンショット 2019-03-29 18.47.03.png

seedファイルの用意

作成したCSVファイルをrailsアプリのdbディレクトリに入れましょう。
ここで入れ込んだCSVファイルを確認しこの記事の一番最初にある画像のようにカンマで区切られているテキストファイルになっているか確認しましょう。

db/seedファイルの編集

seeds.rb
require "csv"

CSV.foreach('db/seeds/csv/content.csv', headers: true) do |row|
  Content.create(
    title: row['title'],
    image_url :row['image_url'],
    director: row['director'],
    description: row['description'],
    open_date: row['open_date']
  )
end

私はseedsフォルダを別で作りその中にcontent.csvファイルを入れているので'db/seeds/csv/content.csv'のような記述をしていますが'db/〇〇.csv'と書いても大丈夫です。
キーの部分にはテーブルのカラム名を、バリューにはCSVファイルの列を記入していきます。
それを可能にしているのが"headers: true"になります。
スクリーンショット 2019-03-31 8.30.50.png

rake db:seedコマンドを入力

CSVファイルを作成しseeds.rbファイルに記述ができたらターミナルでコマンドを入力するだけです。

seedsファイルにコードを書いていればターミナルでrake db:seeds
自分のようにseedデータを分割して実行できるようにするにはrake db:seed:xxx.rbを打てば実行されるはず。

seedデータを分割する方法はこちらのサイトがわかりやすいです。

コマンドを実行したらrail cでコンソールでDB情報を確認してみましょう!

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

41
43
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
41
43