modelをrails2.1.0で作ってみる

rails2.1.0で以下のコマンドを実行します

ruby script/generate model event

以下のファイルが作成される

class CreateEvents < ActiveRecord::Migration
  def self.up
    create_table :events do |t|
     t.timestamps
    end
  end

  def self.down
    drop_table :events
  end
end

このt.timestampsがupdated_atやdeleted_atと同等の意味をなしているなんて・・・
以下はrails1.2.6を使ったときにcreate_tableに書き込んだ内容

     t.column :title, :string
     t.column :contents, :text
     t.column :start_date, :datetime
     t.column :end_date, :datetime
     t.column :created_at, :datetime
     t.column :updated_at, :datetime
     t.column :deleted_at, :datetime

これをrails2.1.0で表すと

class CreateEvents < ActiveRecord::Migration
  def self.up
    create_table :events do |t|
     t.string :title, :null => false
     t.text :contents
     t.datetime :start_date, :end_date, :null => false
     t.datetime :deleted_at
     t.timestamps
    end
  end

  def self.down
    drop_table :events
  end
end

凄いですよね。t.columnと記載する必要がなくなり、いきなり型を指定できて、同じオプションの場合、複数同時に宣言できる。。。とっても変わりましたね(汗)
同時に宣言しているのは以下の文です。

t.datetime :start_date, :end_date, :null => false

これでdb:migrateすると〜

mysql> desc events;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| title      | varchar(255) | NO   |     | NULL    |                |
| contents   | text         | YES  |     | NULL    |                |
| start_date | datetime     | NO   |     | NULL    |                |
| end_date   | datetime     | NO   |     | NULL    |                |
| deleted_at | datetime     | YES  |     | NULL    |                |
| created_at | datetime     | YES  |     | NULL    |                |
| updated_at | datetime     | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

こんにゃ感じです。