0

我有一个迁移文件

class CreateProductDetails < ActiveRecord::Migration

    def change
        create_table :product_details do |t|
        t.integer :quantity , :default => 1
        t.float :price , :default => 0.0
        t.float :fee , :default => 0.0    
        t.timestamps            
      end          
    end    
end

该表已使用了很长时间,并保存了我不想丢失的重要数据。现在我想缩放并将默认值(0.00)添加到 colm 价格/费用中。我生成了一个新的迁移文件,例如:-

class AddScaleToProductDetail < ActiveRecord::Migration
   def self.up
   change_column :product_details, :price, :float, :default => 0.00, :scale =>2
   change_column :product_details, :fee, :float, :default => 0.00, :scale =>2
  end
end

现在我进行了迁移:-

[root@www project_trunk]# rake db:migrate
==  AddScaleToProductDetail: migrating ====================================
-- change_column(:product_details, :price, :float, {:default=>0.0, :scale=>2})
   -> 0.6311s
-- change_column(:product_details, :fee, :float, {:default=>0.0, :scale=>2})
   -> 0.0480s
==  AddScaleToProductDetail: migrated (1.3898s) ===========================

...现在我有几个问题...

  • 为什么迁移运行时我仍然看到 default-0.0,

  • 此外,任何新插入的值仍会保存为 22 而不是 22.00(预期)。

  • 我想将现有值更新为小数点 2。

4

1 回答 1

0

尝试指定精度:

change_column :product_details, :price, :float, :default => 0.00, precision: 6, :scale =>2

如果您愿意,或者更精确,请记住:

1234.12
precision = 6
scale = 2

要检查您是否得到正确的结果,请在 SQL Server 控制台中:

use your_database;
explain your_table;

你应该看到这样的东西

product_details       | float(6,2)
于 2013-05-08T12:30:28.460 回答