Ruby on Rails 2.1 - 迁移
Rails Migration 使用 Ruby 定义对数据库架构的更改,从而可以使用版本控制系统使内容与实际代码保持同步。
它有很多用途,例如 −
开发人员团队 − 如果一个人更改了架构,其他开发人员只需更新并运行"rake migration"即可。
生产服务器 − 在推出新版本时运行"rake migration",以使数据库也保持最新状态。
多台机器 −如果您同时在台式机和笔记本电脑上进行开发,或者在多个位置进行开发,迁移可以帮助您保持它们同步。
Rails 迁移可以做什么?
create_table(name, options)
drop_table(name)
rename_table(old_name, new_name)
add_column(table_name, column_name, type, options)
rename_column(table_name, column_name, new_column_name)
change_column(table_name, column_name, type, options)
remove_column(table_name, column_name)
add_index(table_name, column_name, index_type)
remove_index(table_name, column_name)
迁移支持所有基本数据类型 − 字符串、文本、整数、浮点数、日期时间、时间戳、时间、日期、二进制和布尔值 −
字符串 − 适用于标题等小数据类型。
文本 − 适用于较长的文本数据,例如描述。
文本 − 适用于较长的文本数据,例如描述。
整数 −用于整数。
浮点数 − 用于小数。
日期时间和时间戳 − 将日期和时间存储到列中。
日期和时间 − 仅存储日期或仅存储时间。
二进制 − 用于存储图像、音频或电影等数据。
布尔值 − 用于存储真值或假值。
有效的列选项是 −
limit ( :limit => “50” )
default (:default => “blah” )
null (:null => false implies NOT NULL)
注意 − Rails Migration 所执行的活动可以使用任何前端 GUI 或直接在 SQL 提示符上完成,但 Rails Migration 使所有这些活动变得非常容易
有关这些的详细信息,请参阅 Rails API。
创建迁移
以下是创建迁移的通用语法 −
C: uby\application> ruby script/generate migration table_name
这将创建文件 db/migrate/001_table_name.rb。迁移文件包含描述数据库表数据结构的基本 Ruby 语法。
注意 − 在运行迁移生成器之前,建议清理模型生成器生成的现有迁移。
我们将创建两个迁移,分别对应我们的三个表 - books 和 subject。。
C: uby> cd library C: uby\library> ruby script/generate migration books C: uby\library> ruby script/generate migration subjects
请注意,在创建迁移时,book 和 subject 使用的是小写,而使用复数形式。这是 Rails 范例,每次创建迁移时都应遵循此范例。−
编辑代码以告诉它要做什么
转到应用程序的 db/migrate 子目录,然后使用任何简单的文本编辑器逐个编辑每个文件。
按如下方式修改 001_books.rb −
ID 列将自动创建,因此不要在此处执行此操作。
class Books < ActiveRecord::Migration def self.up create_table :books do |t| t.string :title, :limit => 32, :null => false t.float :price t.integer :subject_id t.text :description t.timestamp :created_at end end def self.down drop_table :books end end
方法 self.up 用于迁移到新版本时,self.down 用于在需要时回滚任何更改。此时,上述脚本将用于创建 books 表。
修改 002_subjects.rb 如下 −
class Subjects < ActiveRecord::Migration def self.up create_table :subjects do |t| t.string :name end Subject.create :name => "Physics" Subject.create :name =>"Mathematics" Subject.create :name => "Chemistry" Subject.create :name => "Psychology" Subject.create :name => "Geography" end def self.down drop_table :subjects end end
上述脚本将用于创建 subjects 表;它将在主题表中创建五条记录。
运行迁移
现在您已经创建了所有必需的迁移文件,是时候针对数据库执行它们了。为此,请转到命令提示符并打开应用程序所在的库目录,然后键入 rake move,如下所示 −
C: uby\library> rake db:migrate
这将创建一个"schema_info"表(如果不存在),该表跟踪数据库的当前版本。每次新的迁移都将是一个新版本,任何新的迁移都将运行,直到您的数据库达到当前版本。
Rake 是一个类似于 Unix make 程序的 Ruby 构建程序,Rails 利用它简化复杂任务的执行,例如更新数据库的结构等。
运行生产和测试数据库的迁移
如果您想指定用于迁移的 rails 环境,请使用 RAILS_ENV shell 变量。
例如 −
C: uby\library> set RAILS_ENV=production C: uby\library> rake db:migrate C: uby\library> set RAILS_ENV=test C: uby\library> rake db:migrate C: uby\library> set RAILS_ENV=development C: uby\library> rake db:migrate
注意 − 在 Unix 上,使用"export RAILS_ENV=production"而不是 set 命令。
下一步是什么?
现在我们有了数据库和所需的表。在后续两章中,我们将探索两个重要组件,即控制器 (ActionController) 和视图 (ActionView)。
- 创建控制器 (Action Controller)
- 创建视图 (Action View)