我正在执行描述的步骤 here :
关于一些背景知识,这个网络应用程序是一个拍卖管理系统。 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 工作,我可以做正确的通过检查 nil 并让它打印 $0.00 来在 View 中设置格式),但默认值仍为 -0.0。
我试图回滚迁移,但它们抛出异常作为“不可逆迁移”,这是我试图通过使用 from: nil, to: 0.00
开始的。
我的问题是,按照 Rails 指南中的格式,我做错了什么?解决此问题的最佳方法是什么?
最佳答案
只需运行一个空迁移:
rails generate migration AddAmountRaisedToAuctions
然后在您的change
方法中添加以下代码:
def change
change_column :auctions, :amount_raised, :decimal, :null => false, :default => 0
end
现在运行 rake db:migrate。
关于ruby-on-rails - 将 decimal 列迁移到默认值 0 在架构中变为负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33206413/