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

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

我正在执行描述的步骤 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/

相关文章:

ruby-on-rails - 如何告诉 ActiveScaffold 始终在 ListView 中显示搜索表单?

ruby-on-rails - rake 中止!参数错误 : same file:

Mac/Linux 和 Windows 上的 Ruby GUI 开发

ruby - 如何更改 Ruby 中 for 循环增量的数量?

PHP Mysql数据库字段

android - 如何在Android中插入新的SQLite表行?

ruby-on-rails - 使用 rake 数据库 :migrate inside another task leaves pending migrations

ruby-on-rails - 数组字段未被识别为属性

ruby - 如何使用 MongoMapper 以随机顺序获取文档?

python - 将 python 对象写入磁盘而不加载到内存中?