1、抽象层上看看
migration
迁移:
需要更改数据库结构,我们便创建一个数据库
migration
迁移,
将这个
migration
迁移放在一个单独的文件内
,在迁移内(用一定的格式)描述数据库更改的内容
,并
将迁移与另外的应用程序文件一起放在版本控制下。然后对数据库使用这个
migration
迁移(执行迁移),结果数据库结构被更改
。
每个
migration
迁移都会有一个序号与其关联,这些序号从
1
开始,
新的
migration
迁移都会得到下一个有效序号,
Rails
会记住应用给数据库
migration
迁移的最后一个序号。当运行迁移时,Rails
将数据库
schema
的序号与有效的
migragion
迁移序号进行比较,如果它发现
migration
迁移的序号大于数据库的
schema
,它就会应用(执行)
migration
迁移。
我们通过让每个
migration
迁移都是可回溯的来
回溯
schema
的版本
。每个
migration
迁移实例上都包含两个指令集。一套告诉
Rails
在应用
migration
迁移时对数据库做出什么修改,另一套则告诉
Rails
如何回溯这些修改。
要回溯一个
schema
,我们只要简单地告诉
Rails
我们需要数据库
schema
序号就可以了。如果当前数据库
schema
有个比目标序号更高的序号,则
Rails
会接受带有数据库当前序号的
migration
迁移,并使用它进行回溯。这会从
schema
中移除
migration
迁移的修改,并降低数据库的序号。它会反复执行此过程直到得到期望的数据库版本。
具体如下:当运行 rake db:migrate命令时rake首先检查schema_info
表(该表一行一列,由migration迁移代码管理,用于记住当前的数据库版本。
)。如果该表不存在,它将创建一个并且生成版本号为当前时间
的记录。若该表存在,则从表中读取版本号。
然后
migration
迁移代码查看
db/migrate
目录下的所有
migration
迁移文件。如果有序号
晚于
当前数据库的版本号,那么会为数据库依次应用每个
migration
迁移文件。在最晚一个
migration
迁移文件应用后,
schema_info
表的版本号会被更新为该文件的序号。
如果我们这一序号上再次运行
migration
迁移,则不会发生任何事。
但是,如果我们随后创建了一个新的
migration
迁移文件,它就会有个晚于数据库版本号的序号。如果我们随后运行该
migration
,则这个新的
migration
迁移文件会被运行。
可以通过给
rake db:migrate
命令行应用
VERSION=
参数来为数据库强制指定一个特定的版本号。如果你给出的版本号晚于数据库的版本号,则会以运行数据库版本的
migration
开始,以你指定的版本
migration
结束。
如果命令行的版本号早于当前数据库的版本号,
任务
查找与数据库版本匹配的
migration
迁移文件,并且回溯它,之后降低数据库版本号,查找匹配文件,再回溯它,直到版本号匹配命令行中指定版本号。也就是说,
migration
迁移被向后应用以回溯
schema
回到你指定版本。
2、相关情况
(1)迁移文件的创建:可手工创建但一般要用生成器来创建,生成器在生成模型的同时将会生成迁移文件(ruby script/generate model discount),也可用生成器直接生成迁移文件(script/generate migration add_price_column)。
(2)迁移文件
class AddEmailColumnToOrders < ActiveRecord::Migration
def self.up
add_column :orders, :e_mail, :string
end
def self.down
remove_column :orders, :e_mail
end
end
(2)migration
迁移支持的(column type
)列类型包括:
:binary
,
:boolean
,
:date
,
:datetime
,
:float
,
:integer
,
:string
,
:text
,
:time
,和
:timestamp
。
为支持不同数据库之间的迁移,Rails migration
将从具体的数据库类型系统隔离开而使用逻辑类型。如果你迁移一个
MySQL
数据库,那么
:string
类型将创建一个
varchar(255)
类型的列。在
Postgres
上,同样的迁移会添加一个
varing(255)
类型的列。
(3)在定义数据库列类型时可指定三个选项,每个选项由
key=>value
对给出:
1
、
:null => true or false
如果为
true
,则基础列被添加一个不能为
null
的约束
(
如果数据库支持的话
)
。
2
、
:limit => size
设置字段尺寸的限制。这基本上出现在用
string
创建数据库的列时。
3
、
:default => value
为列设置缺省值时,如果传递一个
Ruby
值
(
或
Ruby
表达式
)
,这个值便会成为的默认值。对一些数据库,你也可以传递一个包含数据库指定表达式的字符串。例如,指定
add_column :orders, :placed_at, :datetime, :default => Time.now
将在
migration
迁移运行时,设置列的默认值为日期和时间,指定
add_column :orders, :placed_at, :datetime, :default => "now()"
会设置
MySQL now()
函数为默认值,因此当前日期时间将被插入到任何新的行内。后面的语法很明显是数据库指定的。
迁移类型选项的例子:
add_column :orders, :name, :string, :limit => 100, :null => false
add_column :orders, :age, :integer
add_column :orders, :ship_class, :string, :limit => 15, :default => 'priority'
分享到:
相关推荐
这是关于rails 2.0 API文档,方便查询,是热爱rails人员的必备武器
word文档主要是Ruby on Rails 2.0的新特性介绍
jRuby On Rails WEB 2.0
不敢说是最好的。但绝对是很有用的。 和网上很多文章不一样。很实用。网上的一些文章都转来转去的。 刚开始还会让你越看越晕。这个是我的亲身的体验!所以我把最实用的上传上来,还希望大家...尤其是rails2.0的。
Rails2.0资料,好好了解。
这是用于windows/linux平台下本地安装ruby on rails的安装包,版本为2.0.2,适合网络速度不快的用户下载本地安装rails.
《JRuby on Rails Web 2.0 实用项目》 英文PDF + 源码
Rails2.0基础,英文版.适合于了解Rails2.0框架应用的初学者.
sqlite.dl文件 博文链接:https://dingji.iteye.com/blog/154563
rails_apps_composer, 一个 gem,为 Rails 启动应用程序创建 Rails 应用程序模板 Rails 应用编辑器 Rails 应用程序编辑器 gem 安装一个 命令行 工具来从"食谱"的Collection 组装 Rails 应用程序。"你可以使用 rails_...
JRuby on Rails Web 2.0 Projects
博文链接:https://moyuan.iteye.com/blog/221185
rails3-mongoid-devise, 示例 Rails 3.2应用,带有数据 Mongoid,用于验证 Rails 4.1有关设计的Rails 4.1示例应用程序,请参见:rails设计有一个用于设计的教程:Rails 设计教程。类似示例和教程这是来自 RailsApps...
mongoid_rails_migrations, Mongoid的数据迁移 发行说明最新版本,1.1. x, 目标 Mongoid> = 4.0.0和 Rails> = 4.2.0.对于 Rails> = 3.2.0和 Mongoid> = 3.0.0,使用版本 1.0.0.
rails 2.0 english version