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)
コメント