在创建 DOCUMENTS 表之后,假设您决定存储关于每个文档的附加信息,例如操作系统平台、上传时间和最近更改时间。产生的 DOCUMENTS 表应该包含以下列(新添加的列用粗体标示)。
表 3. DOCUMENTS 表中的列和描述
| 列名 | 数据类型 | 描述 |
|---|---|---|
| ID | Integer | 主键 |
| Name | VARCHAR | 文档的名称 |
| Size | Integer | 文件大小 |
| Data | BLOB | 以二进制模式存储的文件,最大 2 M |
| Content_type | VARCHAR | 文档类型,包括:.doc、.ppt、.pdf、.sw、.exe、.a、.so、.gif、.jpeg、.mov、.avi、.mpeg、.bmp 等 |
| Created_at | TIMESTAMP | 文件被上传的时间(见注 9) |
| Updated_at | TIMESTAMP | 文档最近更新时间戳(见注 9) |
| Platform | VARCHAR | 特定于文件平台的信息 |
然后生成第二个迁移,以便将这些属性添加到 DOCUMENTS 表中:
a) 运行ruby script/generate migration add_docs_attributes。
这样会生成 db/migrate/002_add_docs_attributes.rb 文件。
清单 10. 创建第二个迁移,以便将列添加到 DOCUMENTS 表中
D:\rails\teamroom>ruby script/generate migration add_docs_attributes
exists db/migrate
create db/migrate/002_add_docs_attributes.rb
|
b) 像下面这样编辑 002_add_docs_attributes.rb:
清单 11. 查询 SCHEMA_INFO 表
class AddDocsAttributes < ActiveRecord::Migration
def self.up
add_column :documents, :created_at, :timestamp
add_column :documents, :updated_at, :timestamp
add_column :documents, :platform, :string, :limit => 10
end
def self.down
remove_column :documents, :created_at
remove_column :documents, :updated_at
remove_column :documents, :platform. end
end
|
c) 同样,发出rake db:migrate来执行第二个迁移。
清单 12. 运行第二个迁移,将附加列添加到 DOCUMENTS 表中
D:\rails\teamroom>rake db:migrate
(in D:/rails/teamroom)
== AddDocsAttributes: migrating ===============================================
-- add_column(:documents, :created_at, :timestamp)
-> 0.0500s
-- add_column(:documents, :updated_at, :timestamp)
-> 0.0100s
-- add_column(:documents, :platform, :string, {:limit=>10})
-> 0.0000s
== AddDocsAttributes: migrated (0.0600s) ======================================
|