ページ

2012年5月9日

YAML形式のfixtureファイルの書き方

photo credit: Ezu via photo pin cc
Railsアプリケーションの開発において、データベースの初期化を行うためにはseedファイルを使うかfixtureファイルを使う方法がある。今回はfixtureファイルを用いたデータの初期化を想定し、fixtureファイルの適切な書き方を説明したい。

書き方によっては問題なくfixtureされるのに、実際にはデータが入らないということもあるので、そのあたりも解説したい。

バージョン

  • ruby 1.9.3
  • rails 3.2.2

基本の書き方

authorsテーブルとauthor_idを外部キーに持つbooksテーブルがあるとして話を進める。

authors.yml
shun_tak:
  name: Shun Tak

dave:
  name: Dave Thomas


books.yml
ruby:
  title: プログラミングRuby 1.9
  author: dave

tech:
  title: 開発日誌
  author: shun_tak


一つのブロックが一つのレコードを表し、レコードを識別するラベル(shun_tak: , dave: など)の下位レベルに「フィールド名: 値」の形式で記述する。注意点として、
  • インデントはタブ文字ではなく空白(一般的には半角スペース2個)で表現する
  • フィールド名: の後には半角スペースが入る
という点に注意する。

外部キー

外部キーは「モデル名: 参照先のラベル」の形式で表現する。上の例でもsubmitterにはsubmitter_idではなく、submitterに対応するラベルが記述されている。
Railsアプリケーションではデータ作成時に、idをauto incrementせずにRailsの機能が自動で番号を付ける。ラベルによる関連付けを行う場合も同様で、特にidを明示する必要はない。(明示してもよいが)

ラベル名の制約

レコードごとに付けるラベルだが、数字のみだとデータが挿入されないようだ。特にエラーが出力されないのでしばらく原因が分からなかったが、ラベルの数字を文字列を含むように変えたら解消されたので、これが原因だと思われる。

参考

Related Posts Plugin for WordPress, Blogger...