将十进制列迁移到默认值0在架构

时间:2015-10-19 03:56:43

标签: ruby-on-rails ruby database ruby-on-rails-3 sqlite

我正在执行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指南中的格式,我做错了什么?解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

只需运行空迁移:

rails generate migration AddAmountRaisedToAuctions

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

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

现在运行rake db:migrate。