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)


コメント