1
負我下面的步驟描述here:遷移小數列默認值0變爲模式
對於一個小的背景下,這個Web應用程序是一個拍賣管理系統。 Auction
類中的amount_raised
列應該表示美元金額,即拍賣時的金額。默認情況下,我想要它是$0.00
。在auction.rb
文件我的設置方法如下:
def amount_raised=(val)
currency = val.to_s.gsub(/[-$,]/,'').to_f if val.present?
write_attribute(:amount_raised, currency)
end
我試圖作出的第一個遷移如下:
change_column_default :auctions, :amount_raised, from: nil, to: 0.00
但是,這種變化導致我schema.rb
文件中的以下(精度和規模已經在那裏):
t.decimal "amount_raised", precision: 5, scale: 2, default: -0.0
我想再拍遷移更改默認從-0.0
到nil
(因爲我想如果我不能得到0的工作,我可以通過檢查零並使其打印$ 0.00來在視圖中執行正確的格式),但默認值保持在-0.0。
我試圖回滾遷移,但他們拋出異常爲「不可逆遷移」,這是我試圖通過使用from: nil, to: 0.00
開始避免。
我的問題是,遵循Rails指南的格式,我做錯了什麼?解決這個問題的最好方法是什麼?
這個列已經存在了嗎?這是否會破壞已存在的非零值的數據? –
如果該列已經存在,而不是'add_column',則它將是'change_column'。它不會破壞現有的數據,但對此不確定。 – nik
這工作!任何想法爲什麼我的原始方法使它不高興? –