Rails迁移十进制列:默认=> 0将MySQL精度重新设置为0?

时间:2011-12-16 14:30:10

标签: ruby-on-rails ruby-on-rails-3

我正在使用Rails 3.0.3(不要问),当我使用十进制列和set运行表的迁移时: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

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

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

change_column :courses, :distance, :decimal, :default => 0.0

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

Google没有透露任何信息,所以我认为我做错了。

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

我也被困在这一个,我无法找到解决方案。最后我不得不进入mysql并更改所需的精度,比例和默认值,我使用here进行了一些修改

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;

另请尝试:default => 0.0 #note 0.0作为默认值必须是指定的数据类型,即十进制

希望它有所帮助。

答案 2 :(得分:1)

您也可以

def change
    change_column :courses , :distance, :decimal, :precision => 5, :scale => 2, :null => false, :default => '0'
end

答案 3 :(得分:0)

我现在正在尝试这个并且似乎有效。

Active Records Migrations

class ChangeVisitratioFormatInCampaigns < ActiveRecord::Migration[5.0]
  def change
    reversible do |dir|
        change_table :campaigns do |t|
            dir.up { t.change :visitratio, :decimal, :precision => 5, :scale => 4, :default => 1 }
            dir.down { t.change :visitratio, :integer }
        end
    end
  end
end