将 decimal 列迁移到默认值 0 在架构中变为负值

Migrating a decimal column to default 0 becomes negative in the schema

我正在按照描述的步骤进行操作 here

关于一些背景知识,此 Web 应用程序适用于拍卖管理系统。 Auction class 中的 amount_raised 列应该代表美元数额,即在拍卖会上赚到的钱数。默认情况下,我希望它是 [=15=].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),但默认值仍为 -0.0。

我试图回滚迁移,但它们抛出异常 "irreversible migrations",这是我试图通过使用 from: nil, to: 0.00 开始来避免的。

我的问题是,按照 Rails 指南中的格式,我做错了什么?解决此问题的最佳方法是什么?

只是 运行 一个空迁移:

rails generate migration AddAmountRaisedToAuctions

然后在您的 change 方法中添加以下代码:

def change
  change_column :auctions, :amount_raised, :decimal, :null => false, :default => 0
end

现在运行耙db:migrate。