2011-09-22 42 views
1

我在原來的遷移,我有這樣的:使用Rails更改表格信息遷移

create_table :credit_purchases do |t| 
    t.column :amount, :decimal, :precision => 8, :scale => 2, :null => false 
    t.column :time, :datetime, :null => false 
end 

這產生了以下MySQL表定義:

CREATE TABLE `credit_purchases` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `amount` decimal(8,2) NOT NULL, 
    `time` datetime NOT NULL, 
    PRIMARY KEY (`id`), 
) 

當我運行它,它不會改變其定義如下:

change_column :credit_purchases, :amount, :decimal, :precision => 8, :scale => 2 
change_column :credit_purchases, :time, :datetime 

我期望的定義結果是:

CREATE TABLE `credit_purchases` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `amount` decimal(8,2) DEFAULT NULL, 
    `time` datetime DEFAULT NULL, 
    PRIMARY KEY (`id`), 
) 

我需要做什麼來產生預期的結果?我想避免通過遷移來定義DB約束。

回答

2

嘗試明確加入:null => true

+0

是的,這將工作,但試圖避免在遷移中指定DB約束。 – keruilin

+0

爲什麼指定':null => true'解決了這個問題? –

+0

遷移是一個相當短暫的事情是如此特別。如果你想避免使用DB約束(相反,更喜歡模型約束),這是一個完全有效的哲學,並且加入':null => true'會讓你回到正軌。如果你想讓你的schema.rb免於使用':null => true'標記,我猜如果你用':null => true'應用遷移,然後再遷移沒有它,schema.rb可能「免費」任何':null'標記。 – cailinanne