Railsのデータベースに初期データを投入するのにseed-fu
を使っていますが、書き込むものが多くなって悩みも出てきました。
seed-fu
とは
詳しくは別な人が書いてくれていますが、データベースの初期値投入を、単に機械的に流すだけでなくて、既存のテーブルと照合しつつ進めていくような仕組みとなっています。
投入するものが増えてきて
マスターとしてデータベースにあれば外部キーをかけられるという事情も手伝って、気がつけばseed-fu
で投入する先のモデルが数十個になっていました。そして、fixture
をいくつかのファイルに分けて書いていたのですが、定義を探したり1変更したりしようとする際に、目的のものがなかなか見つからない、という事態を招いてしまっていました。
で、1モデルにつき1ファイルに近いぐらいまで2ファイルを分けてみようと考えたのですが、そのままフラットにファイルを置けば、やはりファイル数が多すぎて見通しが良くない状態となりそうです。
読み込み方法を調べてみた
ということで、seed-fuのコードを追ってみたところ、ディレクトリリストはDir#[]
でファイルに展開していることが判明しました。ということで、グロブパターンとして/**/
を入れれば、「指定のフォルダとそれ以下」を拾えそうです。
SeedFu.fixture_paths = [Rails.root.join('db', 'fixtures', '**')]
なお、デフォルトではdb/fixtures/#{Rails.env}
以下を拾う設定が入っていますが、上のような設定をすればもちろん全フォルダが読み取られますので要注意です。