18

这似乎已经被问过:rails decimal precision and scale

但是在运行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"

其他人有这个问题吗?

谢谢,

乔什

4

4 回答 4

36

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

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

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

于 2011-04-18T02:01:51.777 回答
6

不适用于 SQLite3

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

在 sqlite3 中修改列的类型

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

谢谢大家的回复。

于 2010-04-02T22:26:24.860 回答
1

删除并重新生成db\schema.rb文件。

rake db:schema:dump
于 2010-03-15T21:18:16.150 回答
0

一个黑客,但它应该让你去你需要去的地方:

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
于 2010-03-16T22:00:25.130 回答