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 price/feeに追加したいと思います.iは次のような新しい移行ファイルを生成しました:-

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.00 (予想) ではなく 22 として保存されます。

  • 既存の値を小数点以下 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 サーバー コンソールで次のようにします。

use your_database;
explain your_table;

あなたはこのようなものを見るべきです

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