2008年1月6日日曜日

アプリがちゃんと動かない

さて、とりあえずDBを MySQL に切り替えられるようになったので、チュートリアルに従って先に進めてみた。

scaffold を使用することで、簡単な DB へのアクセスができるページが出来上がるはずだが、"Show" "Edit" 等のリンクは表示されるものの、DBの中身やフィールド名が全く表示されない。
model や controller を作ってないせいか? とか、generate scaffold する時の引数の指定の仕方が間違ったか? とか、いろいろトラブったから不整合でもおきたか? とかいろいろ考えたが、一からチュートリアル通りに作っても、やっぱり表示されない…

こういう時はやはりグーグルさんだが、引っかかるページはどれも同じ手順なのでヒントらしいヒントがなかったが、RoR の公式ページから探ったら、それっぽいページがありました。やはり、RoR 2.0 になって手順の変わった部分があるようだ。

以前は、DB を作成してそこに手動でテーブルを作成した後に generate scaffold すると、controller ができあがり、すぐアクセスできるようになった。

2.0 以降では、この手順だと失敗すると書いてある。
2.0 以降の手順は、テーブルを作らず、generate scaffold した後、rake db:create:all を行うと、まず 3 つのDB(???_development/test/production)ができる。その後 db/migrate/001_create_???s.rb にテーブルのメンバを書いてから rake db:migrate すると、それが反映されたテーブルが出来上がる。(ここが間違い:後述参照)

さて、ここまでは順調に行ったので、サーバをスタートさせてアクセスしてみる。

… やっぱり同じで、サーバは動くが "Show" 等のリンクは表示されるが、DBの中身やフィールド名は表示されない。
さていったい問題はどこにあるのか???

と思ったら、generate scaffold の引数の渡し方がおかしいことが判明。
generate scaffold Tablename field1:type1 field2:type2
のように、引数にテーブルのメンバーを渡す必要があることが分かった。つまり、db/migrate/001_create_???s.rb は手動で書くのではなく、scaffold の引数に渡すことで自動でできあがるのであった。(上記 2.0 用のページを斜め読みしてたのが敗因)

2.0 でここの手順が変わったことによって、今まで DB へのテーブルの登録を何かしらの方法で手動で行わなくてはならなかったので、DB の文法を少なからず知っている必要があったが、scaffold への引数に指定するだけで良くなったので、少しハードルを低くしたということだろう(手順は増えたが)。

とりあえずこれで次のステップに進めそうだ。

0 件のコメント: