mysql - Ruby on Rails - 如何将代码从 float 迁移到十进制?

标签 mysql ruby-on-rails ruby

所以我有一个 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

在生成的迁移中,您将添加 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

这将为您转换数据库。请记住,当从 float 转换为小数时,您将丢失一些有效数字,具体取决于您将 scale 设置为什么,但如果您处理的是产品价格,这可能不会成为一个很大的问题。

关于mysql - Ruby on Rails - 如何将代码从 float 迁移到十进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13255987/

相关文章:

ruby-on-rails - 使用 secret_key_base 作为回形针 hash_secret

ruby - 描述ruby中的类关系

ruby-on-rails - 如何在 Rails 3 事件记录中链接查询

java - Spring,AWS,访问远程数据库 : java. lang.AbstractMethodError : null at org. springframework.core.OrderComparator.findOrder(OrderComparator.java:142)

mysql - 从每个类别中选择行数

php - 为什么wordpress要序列化数据库中的数据?

PHP,上传的图像url不存储在数据库中。我哪里错了?

ruby-on-rails - Tailwind CSS 响应类不适用于 Rails ViewComponent gem

ruby-on-rails - 如何向 ActiveResource 进行身份验证以避免 InvalidAuthenticityToken 响应?

ruby-on-rails - 如何在 ruby​​ activerecord 中使用通配符搜索 postgres JSONb 列