Ruby on rails Rails:无法在迁移中使用change\u列添加:精度或:缩放选项?

Ruby on rails Rails:无法在迁移中使用change\u列添加:精度或:缩放选项?,ruby-on-rails,migration,decimal,precision,scale,Ruby On Rails,Migration,Decimal,Precision,Scale,这似乎是以前问过的问题: 但是当运行change\u列迁移以获得:precision或:scale时,它们实际上不会影响架构或数据库,但是db:migrate运行时不会出错 我的迁移文件如下所示: class ChangePrecisionAndScaleOfPaybackPeriodInTags < ActiveRecord::Migration def self.up change_column :tags, :payback_period, :decimal, { :sc

这似乎是以前问过的问题:

但是当运行
change\u列
迁移以获得
: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
还有谁有这个问题吗

谢谢


Josh

删除并重新生成
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
class ChangePrecisionAndScaleOfPaybackPeriodInTags
不适用于SQLite3 对于我正在运行的这个简单测试应用程序,我已经安装了SQLite3。显然,SQLite3不依赖于列类型声明,而且更具动态性,而是查看列的内容—正如这里偶然发现的:

我没有测试它,但我确信这就是架构没有被更改的原因,因为
change\u column
在SQLite3中不会转换为任何内容

感谢各位的回复。

有一个相关的(但不是相同的)问题。我只是在更改比例,所以在更改:比例时,您需要完整的行:

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

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

没有乐趣,仍然显示相同的内容。另外,使用该应用程序表明迁移选项没有任何效果。我运行了相同的脚本,并且
schema.rb
文件也相应地发生了更改。我再次尝试,但仍然没有任何结果。可能与数据库中已有的内容有关?这是一个很好的建议,但也不起作用。我四处寻找合适的语法来修改sqlite3中的列类型,但发现没有办法。我相信使用mysql或其他数据库,我甚至不会有问题。在这里发布答案。
change_column :something, :weight, :decimal, :precision => 10, :scale => 2