seedで初期データを追加してみる

RailsをMySQLに対応させてみるの続き

seedの機能を使ってデータを入れてみる。



とりあえずモデルを作成し、テーブルを作成する。

$ rails generate model user name:string point:integer flag:boolean day:date
$ rake db:migrate

直接createで追加する場合

seed.rbに、下記のように初期データを指定する。

$ vi db/seeds.rb
User.create(:name => '佐藤', :point => 100, :flag => true,  :day => '2001/1/1')
User.create(:name => '鈴木', :point => 200, :flag => false, :day => '2002/2/2')
User.create(:name => '高橋', :point => 300, :flag => true,  :day => '2003/3/3')
User.create(:name => '田中', :point => 400, :flag => false, :day => '2004/4/4')
User.create(:name => '伊藤', :point => 500, :flag => true,  :day => '2005/5/5')

db:seedコマンドを実行するとDBに初期データが追加される。

$ rake db:seed

mysqlに入って確認すると、下記のように入っている。

mysql> select * from users;
+----+--------+-------+------+------------+---------------------+---------------------+
| id | name   | point | flag | day        | created_at          | updated_at          |
+----+--------+-------+------+------------+---------------------+---------------------+
|  1 | 佐藤   |   100 |    1 | 2001-01-01 | 2014-01-04 07:06:35 | 2014-01-04 07:06:35 |
|  2 | 鈴木   |   200 |    0 | 2002-02-02 | 2014-01-04 07:06:35 | 2014-01-04 07:06:35 |
|  3 | 高橋   |   300 |    1 | 2003-03-03 | 2014-01-04 07:06:35 | 2014-01-04 07:06:35 |
|  4 | 田中   |   400 |    0 | 2004-04-04 | 2014-01-04 07:06:35 | 2014-01-04 07:06:35 |
|  5 | 伊藤   |   500 |    1 | 2005-05-05 | 2014-01-04 07:06:35 | 2014-01-04 07:06:35 |
+----+--------+-------+------+------------+---------------------+---------------------+

CSVから追加する場合

CSVのデータを作成する。

$ vi db/user.csv
佐藤, 100, true,  '2001/1/1'
鈴木, 200, false, '2002/2/2'
高橋, 300, true,  '2003/3/3'
田中, 400, false, '2004/4/4'
伊藤, 500, true,  '2005/5/5'

seed.rbには、CSVから読み込むように書く。

$ vi db/seeds.rb
require "csv"

CSV.foreach('db/user.csv') do |row|
  User.create(:name => row[0], :point  => row[1], :flag => row[2], :day => row[3])
end

db:seedコマンドを実行するとDBに初期データが追加される。

$ rake db:seed