导轨:无法在迁移中使用 Change_column 添加 : precision 或 :scale 选项?
-
20-09-2019 - |
题
之前好像有人问过这个问题: Rails 小数精度和小数位数
但是当运行 change_column
迁移为 :precision
或者 :scale
它们实际上并不影响模式或数据库,但是 db:migrate
运行没有错误。
我的迁移文件如下所示:
class ChangePrecisionAndScaleOfPaybackPeriodInTags < ActiveRecord::Migration
def self.up
change_column :tags, :payback_period, :decimal, { :scale => 3, :precision => 10 }
end
def self.down
change_column :tags, :payback_period, :decimal
end
end
但我的架构(和数据)仍然是:
t.decimal "payback_period"
还有其他人有这个问题吗?
谢谢,
乔什
解决方案 2
不适用于 SQLite3
对于我正在运行的这个简单的测试应用程序,我有 SQLite3 设置。显然, SQLite3 不依赖列类型声明 并且更加动态,而是查看专栏的内容 - 正如在这里偶然发现的:
我还没有测试过它,但我确信这就是架构没有被更改的原因,因为 change_column
不会转换为 SQLite3 中的任何内容。
谢谢你们的回复。
其他提示
有一个相关的(但不相同)的问题。我只是在不断变化的规模,所以改变的时候:规模需要完整行:
change_column :something, :weight, :decimal, :precision => 10, :scale => 2
遗漏:十进制(它已经是)和:精度(其已是10)将导致迁移失败
删除和重新生成db\schema.rb
文件。
rake db:schema:dump
有一个黑客,但它应该在哪里,你需要去得到你:
class ChangePrecisionAndScaleOfPaybackPeriodInTags < ActiveRecord::Migration
def self.up
execute "ALTER TABLE tags CHANGE payback_period DECIMAL(3,10)"
end
def self.down
change_column :tags, :payback_period, :decimal
end
end
不隶属于 StackOverflow