Rails:无法在迁移中添加:precision或:scale选项和change_column?

这似乎在之前被问过: rails decimal precision和scale

但是当为:precision:scale运行change_column迁移时,它们实际上不会影响架构或数据库,但db:migrate运行时没有错误。

我的迁移文件如下所示:

 class ChangePrecisionAndScaleOfPaybackPeriodInTags  3, :precision => 10 } end def self.down change_column :tags, :payback_period, :decimal end end 

但我的架构(和数据)仍然如下:

 t.decimal "payback_period" 

别人有这个问题吗?

谢谢,

玩笑

有一个相关(但不相同)的问题。 我只是在改变比例,所以当改变:scale时你需要全线:

 change_column :something, :weight, :decimal, :precision => 10, :scale => 2 

省略:decimal(已经是)和:precision(已经是10)将导致迁移失败。

对SQLite3不起作用

对于我正在运行的这个简单的测试应用程序,我有SQLite3设置。 显然, SQLite3不依赖于列类型声明 ,而是更加动态,而是查看列的内容 – 正如在这里偶然发现的那样:

在sqlite3中修改列的类型

我没有对它进行过测试,但我确信这就是为什么架构没有被更改,因为change_column不会转换为SQLite3中的任何内容。

谢谢你的回复。

删除并重新生成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