db/seeds.rb(rake db:seed)でSQLからDBに初期データ追加

Rails では db/seeds.rb を作成して rake db:seed コマンドでDBに初期データを追加できますが、そのデータ追加を SQL ステートメントから行う方法。以下のページが大変参考になりました。

Seed your Rails App by Importing from SQL | panupan.com

スポンサーリンク

— 環境 —
Rails 4.0.1

db/seeds.rb の作成

上記ページのコードを参考にして変更した以下のコードを書いた。

db/seeds.rb

connection.tables は使わずに、tables 配列に手動で初期データを追加するテーブルを指定しました。また、Dir.glob で db/sql_backup/ 以下の、DB初期データ用の sql ファイルを全て読み込むようにしました。

DB に初期データ追加。

必要な初期データを db/sql_backup/*.sql と sql ファイルで保存すればOK。これでいつでも、rake db:seed で DB に初期データを投入できる。

外部キー制約のあるテーブルを truncate しようとするとエラー

最初、参考ページのコード通りに connection.tables を使って schema_migrations 以外の全てのテーブルに対して TRUNCATE しようとしたらエラーが発生しました。

これだと以下のように、外部キー制約のあるテーブルの truncate ができない。

以下のように一旦外部キー制約をオフにして TRUNCATE して、テーブルを TRUNCATE した後、再び外部キー制約をオンにするという方法が使えるらしい。

db/seeds.rb に書くなら以下のような感じかな。

しかし、私はこのやり方は若干怖い気がしたので、上記コードに書いたとおり初期データを追加するDBテーブル名を tables という配列で指定しました。外部キー制約のないテーブルに対する初期データ追加なら、これでOK。

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!