Railsメモ(7) : rake db:seedでデータを追加する
追加したいデータをCSVファイルとして出力したのでrake db:seed
コマンドを使ってデータを追加してみる。
最初にこれまでに追加したデータを削除しておく。
$ ./bin/rails c Loading development environment (Rails 4.2.3) [1] pry(main)> Song.count (0.2ms) SELECT COUNT(*) FROM "songs" 3 [2] pry(main)> Song.delete_all SQL (12.8ms) DELETE FROM "songs" 3 [3] pry(main)> Song.count (0.9ms) SELECT COUNT(*) FROM "songs" 0
db/seeds.rb
をCSVファイルからデータを読み込んで追加するように編集してコマンドを実行。
require "csv" CSV.foreach('db/seed_songs.csv') do |row| Song.create(title: row[0], display_artist: row[1], ranking: row[2], year: row[3]) end
$ ./bin/rake db:seed $ ./bin/rails c Loading development environment (Rails 4.2.3) [1] pry(main)> Song.count (0.8ms) SELECT COUNT(*) FROM "songs" 2500 [2] pry(main)> Song.all Song Load (12.4ms) SELECT "songs".* FROM "songs" +------+--------------------------------+--------------------------------+---------+------+-------------------------+-------------------------+ | id | title | display_artist | ranking | year | created_at | updated_at | +------+--------------------------------+--------------------------------+---------+------+-------------------------+-------------------------+ | 4 | Hold On | Wilson Phillips | 1 | 1990 | 2015-08-08 06:19:24 UTC | 2015-08-08 06:19:24 UTC | | 5 | It Must Have Been Love | Roxette | 2 | 1990 | 2015-08-08 06:19:24 UTC | 2015-08-08 06:19:24 UTC | | 6 | Nothing Compares 2 U | Sinéad O'Connor | 3 | 1990 | 2015-08-08 06:19:24 UTC | 2015-08-08 06:19:24 UTC | | 7 | Poison | Bell Biv DeVoe | 4 | 1990 | 2015-08-08 06:19:24 UTC | 2015-08-08 06:19:24 UTC | | 8 | Vogue | Madonna | 5 | 1990 | 2015-08-08 06:19:24 UTC | 2015-08-08 06:19:24 UTC | …省略…
無事にデータは追加されたが、手動で追加した3曲分の情報が完全に削除されてなくidが4
から始まっているのが気になる。
idの番号をリセットする方法
rake db:reset
すればDBがリセットされるので、idが1
から始まるようになるがDBを全部リセットするのはやり過ぎな気がする。
調べたところいろいろな方法があるらしいが、今回は以下のgemを使用してみる。
Gemfile
に下記行を追加してbundle install
する。
gem 'activerecord-reset-pk-sequence'
このgemを追加するとreset_pk_sequence
メソッドが使えるようになるので、delete_all
した後にreset_pk_sequence
すればidがリセットされ1
から始まるようになる。
ソースを見たところSQLiteのほかにMySQLとPostgreSQLにも対応しているらしい。
[1] pry(main)> Song.delete_all [2] pry(main)> Song.reset_pk_sequence
CSVファイルからデータを追加できるようになったがrake db:seed
の問題として、コマンドを複数回実行すると同じデータが追加されてしまう。
この対策としてseed-fu
を使うのがよいらしいので次ステップで試してみる。
- 作者: すがわらまさのり,前島真一,近藤宇智朗,橋立友宏
- 出版社/メーカー: 技術評論社
- 発売日: 2014/06/06
- メディア: 大型本
- この商品を含むブログ (8件) を見る