Rails Migration Decimal Column:default => 0将MySQL精度重新设置为0?

jac*_*ter 6 ruby-on-rails ruby-on-rails-3

我正在使用Rails 3.0.3(不要问),当我运行带有十进制列的表的迁移并设置:default => 0时,它将列的比例和精度重新设置为(10,0).

def self.up
 create_table :courses do |t|
  t.integer :user_id
  t.string :name
  t.decimal :distance, :precision => 5, :scale => 2, :default => 0
  t.text :notes

  t.timestamps
 end
end
Run Code Online (Sandbox Code Playgroud)

当我从迁移中删除:default => 0选项时,列的缩放和精度是正确的:(5,2)

我尝试仅使用:default =>:0 set运行change_column迁移,但是将列的比例和精度重新设置为(10,0)

change_column :courses, :distance, :decimal, :default => 0.0
Run Code Online (Sandbox Code Playgroud)

我知道我可以进入MySQL并更正列的精度和规模,但想知道我做错了什么或者这是一个错误?

谷歌没有透露任何信息,所以我认为我做错了什么.

小智 6

试试这个: t.decimal :distance, :precision => 5, :scale => 2, :default => 0.00


His*_*alv 2

我也被这个问题困扰了,找不到解决办法。最终我不得不进入 mysql 并更改所需的精度、小数位数和默认值,我从这里使用了它并进行了一些修改

mysql> ALTER TABLE question ADD (price INTEGER);
mysql> ALTER TABLE question DROP price;
mysql> ALTER TABLE question ADD (frig DECIMAL(5,2));
mysql> ALTER TABLE question CHANGE frig price DECIMAL(5,2);
mysql> ALTER TABLE question ALTER status SET DEFAULT '0';
mysql> ALTER TABLE question MODIFY price INTEGER;
Run Code Online (Sandbox Code Playgroud)

还可以尝试 :default => 0.0 #注意 0.0 作为默认值必须是指定的数据类型,即十进制

希望能帮助到你。