我们可以使用migration工具在存在的数据库表中追加字段:
[quote]ruby script/generate migration add_price_to_product price:decimal[/quote]
命令执行的命令行显示如下:
[quote]exists db/migrate
create db/migrate/20100417140530_add_price_to_product.rb[/quote]
从命令行的显示和数据库中products表的实际数据来看,这条命令执行之后并不真的在数据库的表格中增加一个叫做“price”的字段。而仅仅是生成一个新的名为“20100417140530_add_price_to_product.rb”的文件,以供后面执行“rake db:migrate”命令时使用。
生成的migrate文件的内容为:
这里up方法用来向products表中追加price字段,而down方法则是从products表中除去该字段。
我们可以通过在up方法中追加precision、scale和default来限定price的值域范围,修改后的内容为:
其中,“:precision => 8”表示price可以使用8个数字;“:scale => 2”表示小数点后可以有2位数字;“:default => 0”表示默认值为0。
这样price的值域范围就是[-999999.99, 999999.99],而默认值为0。
现在,我们把这项修改提交到我们的数据库中:
[quote]rake db:migrate[/quote]
执行该命令后用MySQL的Table Editor查看products表的字段,可以看到已经增加了price字段。并且该字段的信息如下:
[table]|Column Name|Data Type|NOT NULL|AUTO INC|Flags|Default Value|Comments|
|price|DECIMAL(8,2)|false|false||‘0.00’|[/table]
再看schema_migrations表中的数据,version字段已经添加一条值为“20100417140530”的记录。
(注:根据书中的说明,在定义金融类型的字段时,应使用decimal类型,而不是float类型。因为float类型有进位问题,不可以用在金融计算上。)
要显示追加的字段,就需要同时修改depot/app/views/products目录下的4个erb文件,添加相应的字段描述。具体的添加内容参照已有的字段写就好了,这里不再赘述。
[color=orange]问题:
没有个简单的方法吗?在一个表中追加一个字段还好啦,要是对多个表进行了大量的追加操作,那光添在erb中添加这些字段的显示代码就很郁闷了。 :? [/color]
[quote]ruby script/generate migration add_price_to_product price:decimal[/quote]
命令执行的命令行显示如下:
[quote]exists db/migrate
create db/migrate/20100417140530_add_price_to_product.rb[/quote]
从命令行的显示和数据库中products表的实际数据来看,这条命令执行之后并不真的在数据库的表格中增加一个叫做“price”的字段。而仅仅是生成一个新的名为“20100417140530_add_price_to_product.rb”的文件,以供后面执行“rake db:migrate”命令时使用。
生成的migrate文件的内容为:
class AddPriceToProduct < ActiveRecord::Migration
def self.up
add_column :products, :price, :decimal
end
def self.down
remove_column :products, :price
end
end
这里up方法用来向products表中追加price字段,而down方法则是从products表中除去该字段。
我们可以通过在up方法中追加precision、scale和default来限定price的值域范围,修改后的内容为:
class AddPriceToProduct < ActiveRecord::Migration
def self.up
add_column :products, :price, :decimal,
:precision => 8, :scale => 2, :default => 0
end
def self.down
remove_column :products, :price
end
end
其中,“:precision => 8”表示price可以使用8个数字;“:scale => 2”表示小数点后可以有2位数字;“:default => 0”表示默认值为0。
这样price的值域范围就是[-999999.99, 999999.99],而默认值为0。
现在,我们把这项修改提交到我们的数据库中:
[quote]rake db:migrate[/quote]
执行该命令后用MySQL的Table Editor查看products表的字段,可以看到已经增加了price字段。并且该字段的信息如下:
[table]|Column Name|Data Type|NOT NULL|AUTO INC|Flags|Default Value|Comments|
|price|DECIMAL(8,2)|false|false||‘0.00’|[/table]
再看schema_migrations表中的数据,version字段已经添加一条值为“20100417140530”的记录。
(注:根据书中的说明,在定义金融类型的字段时,应使用decimal类型,而不是float类型。因为float类型有进位问题,不可以用在金融计算上。)
要显示追加的字段,就需要同时修改depot/app/views/products目录下的4个erb文件,添加相应的字段描述。具体的添加内容参照已有的字段写就好了,这里不再赘述。
[color=orange]问题:
没有个简单的方法吗?在一个表中追加一个字段还好啦,要是对多个表进行了大量的追加操作,那光添在erb中添加这些字段的显示代码就很郁闷了。 :? [/color]