Rails 3 : fixture を Database から出力する方法


fixture など テスト用のデータがコードで用意されていないプロジェクトに途中から入ったことがあります。 ここでは、そのときに Database から fixture を生成した方法について書きます。

環境

  • Rails 3.1
  • Ruby 1.8.7

バージョンが低いため FactoryGirl は使えません。

参考

下記のサイトを参考にしてコードを作りました。 参考にしたサイトのコードでは、 id をたよりに並び順を指定しているので、id のない scheme_migration のテーブルでエラーが発生します。 また、 DB にセッションを入れている場合は sessions テーブルも除外が必要です。 そして、モデルが存在しないテーブルも (存在の是非はともかくプロジェクト内に存在したので) 除外が必要になりました。


方法

task のコードを追加して rake db:fixtures:extract で実行されるように ディレクトリ lib/tasks に配置します。

コード

綺麗ではないですが 除外するテーブルをコード内で指定しています。 また、 id のないテーブルについては (主キーかあるいはどれか基準となるキーでソートすればよかったんですが) エラーが出たらエラーメッセージを出力して次に進むようになっています。

改善の余地がたくさんあるコードです。