`
tiny.strimp
  • 浏览: 29346 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

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

阅读更多
  我们可以使用migration工具在存在的数据库表中追加字段:
 
引用
ruby script/generate migration add_price_to_product price:decimal

  命令执行的命令行显示如下:
 
引用
exists  db/migrate
create  db/migrate/20100417140530_add_price_to_product.rb

  从命令行的显示和数据库中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。

  现在,我们把这项修改提交到我们的数据库中:
 
引用
rake db:migrate

  执行该命令后用MySQL的Table Editor查看products表的字段,可以看到已经增加了price字段。并且该字段的信息如下:
 
Column NameData TypeNOT NULLAUTO INCFlagsDefault ValueComments
priceDECIMAL(8,2)falsefalse‘0.00’

  再看schema_migrations表中的数据,version字段已经添加一条值为“20100417140530”的记录。

  (注:根据书中的说明,在定义金融类型的字段时,应使用decimal类型,而不是float类型。因为float类型有进位问题,不可以用在金融计算上。)

  要显示追加的字段,就需要同时修改depot/app/views/products目录下的4个erb文件,添加相应的字段描述。具体的添加内容参照已有的字段写就好了,这里不再赘述。
  问题:
  没有个简单的方法吗?在一个表中追加一个字段还好啦,要是对多个表进行了大量的追加操作,那光添在erb中添加这些字段的显示代码就很郁闷了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics