所以我有一个 ruby on rails 代码,它使用了很多 float (很多“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
这将为您转换数据库。请记住,当从 float 转换为小数时,您将丢失一些有效数字,具体取决于您将 scale
设置为什么,但如果您处理的是产品价格,这可能不会成为一个很大的问题。
关于mysql - Ruby on Rails - 如何将代码从 float 迁移到十进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13255987/