第一个数据移植脚本将执行表创建和删除功能。通过执行以下命令来创建这个脚本:
%>ruby script/generate migration add_contacts_table
create db/migrate
create db/migrate/001_add_contacts_table.rb
执行这个命令将创建一个经典的框剪,用于创建和删除名为contacts的表。但是,you're
responsible for implementing these features。这样做,打开001_add_contacts_table.rb文件,你看到的类似下面的内容:
class AddContactsTable < ActiveRecord::Migration
def self.up
end
def self.down
end
end
因为这个类的用途就是创建这个表,所以你将使用up方法来创建表和增加列,而使用down方法来删除表。因此如下所示修改这两个方法:
class AddContactsTable < ActiveRecord::Migration
def self.up
create_table :contacts do |table|
table.column :name, :string
table.column :email, :string
table.column :birthday, :date
end
end
def self.down
drop_table :contacts
end
end
每一个table.column调用负责增加一个新的列到表中。传递了两个参数,第一个是列名,第二个是列的数据类型。需要注意的是,尽管它支持使用:limit选项来限定列的大小,你可以不用去设定它;如果:limit没有被提供的话,将使用最大的允许大小。还有,add_column参数支持所有常见的数据类型,例如text、float、decimal、datetime、timestamp和boolean等。另外,它还支持设定默认值和指定列非空。
现在,执行以下命令;它将告诉Rails使用development数据库,并创建contact表。如果你使用的是Linux的话,使用export来替换下面Windows命令中的set:
%>set RAILS_ENV=development
%>rake db:migrate
如果这个命令执行过程中没有任何错误的话,你将不会看到任何输出。因此,要想查看结果,登录到你的MySQL数据库中,选择addressbook_development数据库,然后执行DESCRIBE
contacts命令,你会看到到如下内容:
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
| birthday | date | YES | | NULL | |
+----------+--------------+------+-----+---------+----------------+
4 rows in set (0.02 sec)
你将看到一个id字段已经被自动创建,尽管在表创建声明中没有指定它。这是Rails为你完成常规任务的一个伟大例子之一,它可以让你专注于更重要的事情。还有,你可以在一次数据移植中创建多个表;只需要增加多个create_table代码段到up方法中就可以了。