Agile Web Development with Rails 3nd Edition学习笔记-向数据库表追加字段

我们可以使用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文件的内容为:
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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值