2011-12-16 54 views
5

我正在使用Rails 3.0.3(不要問),當我運行帶有十進制列的表的遷移並設置:default => 0時,它將列的比例和精度重新設置爲(10,0)。Rails遷移十進制列:默認=> 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 

當我刪除:默認=> 0從遷移選項列的縮放和精度是正確的:(5,2)

我試圖運行僅具有change_column遷移:默認=>: 0組,但列的規模和精度進行了重新設置爲(10,0)

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

我知道我可以進入MySQL和糾正列的精度和規模,但想知道如果我做有什麼不對或如果這是一個錯誤?

谷歌顯示沒有信息,所以我認爲我做錯了什麼。

回答

2

我也被困在這一個,我找不到解決方案。最終我不得不進入MySQL和改變所要求的精度,規模和默認值,我用這個從here有一些修改

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; 

相關搜索:默認=> 0.0 #note 0.0的默認值必須在指定的數據類型即小數點

希望它有幫助。

+0

感謝您的答覆。我最終做的是從create_table遷移中刪除:precision和:scale選項,併爲該列添加column_change遷移:precision => 5和:scale => 2.我忽略了:default選項。我把所有東西都回滾了,重新運行了遷移,並且看到MySQL自動地將列的默認值自動設置爲0.0 – jacoulter 2011-12-16 17:52:59

6

試試這個:t.decimal :distance, :precision => 5, :scale => 2, :default => 0.00

1

你也可以做

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

我只是想這個現在,似乎工作。

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