我正在使用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没有透露任何信息,所以我认为我做错了。
答案 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)
我现在正在尝试这个并且似乎有效。
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