所以我有一个 ruby on rails 代码,它经常使用浮点数(很多“to_f”)。它使用一个数据库,其中一些数字也存储为“浮点”类型。
我只想将此代码和数据库迁移到十进制。是否像将数据库列迁移到十进制一样简单(添加一个十进制列,将浮点列复制到十进制一,删除浮点列,将十进制列重命名为旧的浮点列名称),并将代码中的“to_f”替换为“to_d” ? 还是我需要做的不止这些?
非常感谢大家拉斐尔
所以我有一个 ruby on rails 代码,它经常使用浮点数(很多“to_f”)。它使用一个数据库,其中一些数字也存储为“浮点”类型。
我只想将此代码和数据库迁移到十进制。是否像将数据库列迁移到十进制一样简单(添加一个十进制列,将浮点列复制到十进制一,删除浮点列,将十进制列重命名为旧的浮点列名称),并将代码中的“to_f”替换为“to_d” ? 还是我需要做的不止这些?
非常感谢大家拉斐尔
您可以轻松地使用迁移来执行此操作,Rails 将为您生成一些代码。
在命令提示符下,创建一个新的迁移:
rails generate migration change_price_column_to_decimal
Rails 将在目录中创建迁移db/migrate
。文件名将是一个时间戳,后跟_change_price_column_to_decimal.rb
.
在生成的迁移中,您将添加转换字段的方法up
:down
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
的内容,但如果您处理的是产品价格,这可能不是什么大问题。