2011-12-16 6 views
5

私はRails 3.0.3を使用しています(質問しません)。また、10進数の列のテーブルに対してマイグレーションを実行し、default => 0に設定すると、列の位取りと精度が(10,0)に再設定されます。Rails Migration Decimal Column:デフォルト=> 0 MySQL精度を0に再設定しますか?

def self.up 
create_table :courses do |t| 
    t.integer :user_id 
    t.string :name 
    t.decimal :distance, :precision => 5, :scale => 2, :default => 0 
    t.text :notes 

    t.timestamps 
end 
end 

I削除:マイグレーションからデフォルト=> 0オプションスケーリング列のと精度が正しい:(5,2)

Iのみとchange_column移行を実行しようとした:デフォルト=> 0セットが、列のスケールと精度が

change_column :courses, :distance, :decimal, :default => 0.0 

(10,0)に再設定された私は、私は、MySQLに入ると、カラムの精度とスケールを修正することができます知っているが、私がやっている場合には不思議何か間違っているか、これがバグかどうか

Googleでは情報が公開されていないので、私は何か間違っていると思います。

答えて

2

私もこの1つに固執していましたが、解決策が見つかりませんでした。結局私は、MySQLに入り、必要な精度、スケールおよびデフォルト値を変更しなければならなかった、私はまたしてみてくださいいくつかの変更

mysql> ALTER TABLE question ADD (price INTEGER); 
mysql> ALTER TABLE question DROP price; 
mysql> ALTER TABLE question ADD (frig DECIMAL(5,2)); 
mysql> ALTER TABLE question CHANGE frig price DECIMAL(5,2); 
mysql> ALTER TABLE question ALTER status SET DEFAULT '0'; 
mysql> ALTER TABLE question MODIFY price INTEGER; 

hereからこれを使用:デフォルト値として0.0 #noteデフォルト=> 0.0をしなければなりません10進数で指定されたデータ型になる

希望すると助かります。

+0

感謝。私がやったことは、:precisionと:scaleオプションをcreate_tableの移行から削除し、column = changeマイグレーションを:precision => 5と:scale => 2で追加したことです。私はすべてをロールバックし、マイグレーションを再実行しました。そして、MySQLは自動的に列のデフォルト値を0. – jacoulter

+0

に設定しました.Jacoulterは問題ありません。次回この問題に直面する方法を使用します。とにかくそれが今のところ働いている限り、なぜこのようにしなければならないのか、私はまだ理解していません。ありがとう – Hishalv

6

、このいずれかを試してください:あなたはまた、私はちょうど今、この権利をしようとして動作しているようですしています

def change 
    change_column :courses , :distance, :decimal, :precision => 5, :scale => 2, :null => false, :default => '0' 
end 
1

。応答のための

Active Records Migrations

class ChangeVisitratioFormatInCampaigns < ActiveRecord::Migration[5.0] 
    def change 
    reversible do |dir| 
     change_table :campaigns do |t| 
      dir.up { t.change :visitratio, :decimal, :precision => 5, :scale => 4, :default => 1 } 
      dir.down { t.change :visitratio, :integer } 
     end 
    end 
    end 
end 
0

を行うことができますt.decimal :distance, :precision => 5, :scale => 2, :default => 0.00

関連する問題