我正在执行here所述的步骤:
对于一些背景知识,此网络应用程序适用于拍卖管理系统。 amount_raised
类中的Auction
列应该代表美元金额,即拍卖时的金额。默认情况下,我希望它为$0.00
。我在auction.rb
文件中的set方法如下:
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
(因为我认为如果我无法工作,我可以在视图中执行正确的格式检查nil并打印$ 0.00)但默认值保持在-0.0。
我曾尝试回滚迁移,但他们将异常视为"不可逆转的迁移"这是我试图通过使用from: nil, to: 0.00
开始避免的。
我的问题是,按照Rails指南中的格式,我做错了什么?解决这个问题的最佳方法是什么?
答案 0 :(得分:1)
只需运行空迁移:
rails generate migration AddAmountRaisedToAuctions
然后在change
方法中添加以下代码:
def change
change_column :auctions, :amount_raised, :decimal, :null => false, :default => 0
end
现在运行rake db:migrate。