5

所以我有一个 ruby​​ on rails 代码,它经常使用浮点数(很多“to_f”)。它使用一个数据库,其中一些数字也存储为“浮点”类型。

我只想将此代码和数据库迁移到十进制。是否像将数据库列迁移到十进制一样简单(添加一个十进制列,将浮点列复制到十进制一,删除浮点列,将十进制列重命名为旧的浮点列名称),并将代码中的“to_f”替换为“to_d” ? 还是我需要做的不止这些?

非常感谢大家拉斐尔

4

1 回答 1

18

您可以轻松地使用迁移来执行此操作,Rails 将为您生成一些代码。

在命令提示符下,创建一个新的迁移:

rails generate migration change_price_column_to_decimal

Rails 将在目录中创建迁移db/migrate。文件名将是一个时间戳,后跟_change_price_column_to_decimal.rb.

在生成的迁移中,您将添加转换字段的方法updown

class ChangePriceColumnToDecimal < ActiveRecord::Migration
  def up
    change_column :products, :price, :decimal, :precision => 15, :scale => 2, null: false
  end

  def down
    # Either change the column back, or mark it as irreversible with:
    raise ActiveRecord::IrreversibleMigration
  end
end

要执行迁移,请从命令提示符运行适当的 rake 任务:

rake db:migrate

这将为您转换数据库。请记住,从浮点数转换为十进制数时,您将丢失一些有效数字,具体取决于您设置scale的内容,但如果您处理的是产品价格,这可能不是什么大问题。

于 2012-11-06T17:12:42.987 回答