RailsによるアジャイルWebアプリケーション開発第8章~追記

本ではデータベースの定義において外部キーを設定していますが、migrationでは外部キーを設定できません。

また設定する必要はなくて belongs:to()でrailsに従属関係を伝えて product_id のように[参照されるテーブル名の単数形]_id の形で書けば外部キーとなるということです。

これだとデータベースだけを見た場合関係がわからなくなるけど、railsが理解できるから良いということですね。

RailsによるアジャイルWebアプリケーション開発第8章

この章で結構DBを扱うわけですが、productsテーブルの時はscaffoldでDBも一緒に作ったので、後から作るのは初めて。
手順は、

ruby script/generate migration create_line_items

でmaigrationファイルの雛形を作る。
db/migrate/20081214092439_create_line_items.rb
が作成される(ファイル頭の数字は作成時刻が付く)
この定義ファイルを以下のように編集。

class CreateLineItems < ActiveRecord::Migration
  def self.up
    create_table :products,:force => true do |t|
      t.integer :product_id
      t.integer :quantity
      t.decimal :unit_price
    end
  end

  def self.down
    drop_table :products
  end
end

書き方はこちらを参考。
idのカラムは自動的に付きます。終わったら

rake db:migrate

で更新する。注意するのは、またDBの変更が必要な時はさきほど作ったcreate_line_itemsを編集してrake db:migarateするのではなく、一度 ruby script/generate migration ファイル名 で新しいマイグレーションファイルを作って編集してから、rakeをするということです。

なんだか回りくどい気が...システムを運用していく時に役立つんでしょうかね。

DBの見方はRails2.0からsqliteがデフォルトになったのはいいが、どうやって中身みるんだ?を参考。

RailsによるアジャイルWebアプリケーション開発第7章まで

7章は問題なく終了。
前回の日記に書けば良かったが、ビューの拡張子がrhtmlからhtml.erbになっている。
scaffoldではhtml.erbが生成されるがrhtmlも使えるらしい。
このテンプレートファイルの拡張子についてはこちらを参考。

あとスタイルシートを自分で書くのはだるいのでソースをダウンロードしようとしたらアドレスが変わっていた。
http://www.oiax.jp/rails/rails2/erb.html

ここまで来て思ったのは、以前phpsmartyっていうテンプレートエンジンを使ったことがあるが、それはビューとシステムを分けるためのものだった。
確かに、ビューとシステムを分けるのはメリットが感じられた。

railsではMVCモデルを使っているけど、MとCを分けるメリットって何なんだろうか?
デバックやメンテナンスが楽になるとは聞くがまだあまり体験できていない。
この本を読み終えるころには理解できてるのだろうか。

RailsによるアジャイルWebアプリケーション開発第6章まで

とりあえず5章までは何の問題もなく終了。
しかし6章でおもいっきりつまづいた。

$ruby script/generate scaffold product admin
      exists  app/models/
      exists  app/controllers/
      exists  app/helpers/
      exists  app/views/products
      exists  app/views/layouts/
      exists  test/functional/
      exists  test/unit/
wrong number of arguments (1 for 2)

調べてみたらこんな記事が見つかった
scaffoldがwrong number of arguments (1 for 2)でエラーになる
んー、今の僕の症状とぴったりですね。
ようするにrails1.2とrails2では使用が違うということですね。

それで日記の続きにあるようにやってみました。
最初から書くと、

プロジェクト作成
$ rails depot
      create  
      create  app/controllers
    ...
$ cd depot
scaffoldで生成

$ ruby script/generate scaffold product title:string
 description:text image_url:string price:decimal

データベース作成
$ rake db:migrate
$ ruby script/server

といった感じで

http://localhost:3000/products

に正しく表示されるようになりました。
ちなみにrails1.2ではデータベーステーブルを作ってからscaffoldする必要がありましたが、rails2ではscaffoldする時にデータベースの定義ファイルを作ってくれるので、先にscaffoldしてからrakeします。

本ではMySQLを使ってますが、rails2ではデフォルトのデータベースがSQLiteになったということでここではSQLiteでの方法を紹介しました。

rails2.2.2が正しくインストールされてる状態から上記の手順を踏めばうまく表示できるはずです。
なんかid:taka_2さんの日記とほとんど同じ内容になってしまった(笑


railsのバージョンでこんなに仕様が違うとは...
前途多難です。

RailsによるアジャイルWebアプリケーション開発

RailsによるアジャイルWebアプリケーション開発 第2版

RailsによるアジャイルWebアプリケーション開発 第2版

ruby on rails勉強中です。
オライリーの「初めてのruby」を一通り読み終えてrailsの勉強に入っていきます。

この「RailsによるアジャイルWebアプリケーション開発」の方針はオンラインショッピングサイトを作りながら学べるということで、何か作っていきながらの勉強じゃないとモチベーションが続かない僕にピッタリです。

第二版も出てますが、高かったので中古で安くなってた第一版を買いました。

開発環境は、macbook,Max OS X 10.5.5,ruby 1.8.6,Rails 2.2.2、carbon emacsで行きます。

はてなダイアリーを始めてみる。

ここ以外にもブログ書いてるんですが、そっちにはプログラムのコード書いたりしにくいということで、こっちはエンジニアとしての日記を書いて行こうと思います。

つくばの居酒屋検索サイト「ツクのみ」開発者ブログもやってます。