poyopoyo0のブログ

poyopoyoのブログ

Web 関連のメモ書きブログです。

【 Rails 】 $ rake db:setup した後で、別の seed データを DB に新たに追加したいときは

development 環境で $ rake db:setup した後で、別の seed データを DB に追加したいときがある。

db/fixtures/テーブル名.yml に seed データを入力した後、再度 $ rake db:setup を実行してもいいのだが、既に手動で入力しているデータがあった場合、 $ rake db:setup を実行してしまうと、手動で入力したデータがリフレッシュされてしまう。 手動で入力したデータを生かしつつ、新たに別のデータを DB に追加したいときは、以下のようにする。

lib/tasks/ ディレクトリに、適当な名前の rake task を作成する(ここでは仮に lib/tasks/interns.rake としておく)。

例えば reports データを追加したい場合は、 lib/tasks/interns.rakeintern:import_reports を作成して、 db/fixtures/reports.yml に seed データを入力する。その後、

$ bundle exec rake intern:import_reports

と実行すれば、 seed データが DB に追加される。

※ DB に SQLite を使っていた場合、 rake コマンドの実行の前に、一旦 Rails を停止しておかないといけないかも。

※ ちなみに、この方法は production 環境でも使える。 production 環境で追加データを挿入したくなったときには便利かも。