Ruby on Railsの「rake db:seed」でCSVデータを初期登録

Ruby on Rails プログラミング
この記事は約2分で読めます。

※当ブログではアフィリエイト広告を利用しています。

Ruby on Railsでデータベースに初期データを投入するときなどは、「rake db:seed」コマンドを使用する。

実行内容は「db/seeds.rb」に記載する。

今回はCSVファイルを用意して、その内容をデータベースに登録してみる。

実際のソースはこちら。

require "csv"

CSV.foreach('db/data.csv') do |row|
  TestModel.create(:column1 => row[0],
                   :column2 => row[1],
                   :column3 => row[2],
                   :column4 => row[3],
                   :column5 => row[4])
end

「db/data.csv」のデータをループさせ、CSVファイルの各値をそれぞれのカラムへ設定するようにした。

これで「rake db:seed」を実行すれば、データ登録できる。

なお、CSVファイルが「SJIS(Shift-JIS)」だったりすると、以下のようなエラー「invalid byte sequence in UTF-8」になるので、データファイルのCSVファイルを「UTF-8」で保存しなおして、試してみるとよい。

「db/seeds.rb」の先頭に「# coding: utf-8」をつけても解決しなくて、この原因に気付くまで少し時間がかかった。

C:\>rake db:seed
rake aborted!
invalid byte sequence in UTF-8
C:/Projects/rails/kozuchi/db/seeds.rb:3:in `'
Tasks: TOP => db:seed
(See full trace by running task with --trace)

参考サイト

rake db:seedを使った初期データの投入 – Ruby on Rails入門

コメント

タイトルとURLをコピーしました