Migration专辑(三)

来源:棋牌游戏代理赚钱吗 时间:2013-12-18 编辑:www.onales.com
导读:正文 字体大小: 中 Rails-Migration专辑(三) (2006-11-09 11:20:32) 分类: 我的工作 三、 Changing Columns ( 更改列 ) 有时候你可能需要更改列的类型,或改变与列关联的选项。它与你使用 add_c

正文 字体大小: 中

Rails-Migration专辑(三) (2006-11-09 11:20:32)

分类: 我的工作

三、Changing Columns (更改列)

有时候你可能需要更改列的类型,或改变与列关联的选项。它与你使用add_column的方式一样,但指定是一个现有列的名字。我们假设order类型列当前是个integer,但我们需要更改它为string。我们想保持现有数据,所以一个123order类型数据将变成字符串” 123”。随后,我们就可使用非整数值如”new””existing”

Changing from an integer column to a string is easy:

def self.up

change_column :orders, :order_type, :string, :null => false

end

但是,向相反方向的转换却是个问题。我们可能会试着这样写down() migration迁移:

def self.down

change_column :orders, :order_type, :integer

end

但是如果我们的应用程序已在这个列中存储了像”new”这样的数据,down()方法将会丢失数据 --- “new”不能被转换成一个整数。如果这是可接受的,那么migration迁移就接受它。然而,如果我们想创建一个单向的migration迁移 --- 那么它就是不可逆转的 --- 你会中止向下的migration迁移。在这种情况下,Rails提供了一个你可以抛出的特殊异常。

class ChangeOrderTypeToString < ActiveRecord::Migration

def self.up

change_column :orders, :order_type, :string, :null => false

end

def self.down

raise ActiveRecord::IrreversibleMigration

end

end

16.3 Managing Tables (管理表)

到现在我们已经使用migration迁移来管理现有表内的列。现在看看创建和删除表。

class CreateOrderHistories < ActiveRecord::Migration

def self.up

create_table :order_histories do |t|

t.column :order_id, :integer, :null => false

t.column :created_at, :timestamp

t.column :notes, :text

end

end

def self.down

drop_table :order_histories

end

end

create_table接受一个表的名字(记住,表的名字是复数)和一个块。(稍后会看到它也接受一些可选的参数)。块传递一个表定义对象,通过调用该对象的column方法,我们来定义表内的列。

column的调用看起来很熟悉 --- 它们同我们前面使用的add_column方法是一样的,除了它们不是使用表的名字做第一个参数之外。

猜你喜欢
娱乐
3
大众棋牌游戏安卓
3
棋牌游戏代理赚钱吗
3
金星棋牌下载地址
3
妆容
3
网友关注热点
本网站原创内容(文字、图片)受法律保护,“棋牌游戏代理赚钱吗”欢迎引用和转载传播,但请注明出处。
Copyright © 2010-2015 棋牌游戏代理赚钱吗 www.onales.com All rights reserved.