当我创建表用户时,结果表有一个名为id的列,定义为整数。
我尝试将其修改为bigint,未签名如下:
change_column :users, :id, :integer, :limit => 8, :unsigned => true
哪个确实将它更改为bigint,但它不再是自动增量列(尽管它仍然被识别为主索引,并且它未设置为无符号(即使rails告诉我迁移执行正常)
然后我尝试了:
change_column :users, :id, :integer, :limit => 8, :unsigned => true, :null => false, :auto_increment => true
Rails表示迁移执行得很好,但没有任何改变。
我可以试试像:
change_column :users, :id, :primary_index
但这会让我在我开始的地方
我也可以尝试使用MySQL代码的“执行”语句,但我想保持迁移文件“干净”。有没有人遇到过这个问题?
顺便说一下,我还试图在另一列上设置默认值为NULL,在此处(和Google)进行了研究,但没有成功。
编辑:
在通过通用迁移创建表的一部分创建列后,似乎无法编辑列“id”。唯一的方法是通过带有MySQL语法的“execute”语句。
答案 0 :(得分:1)
尝试创建并运行此迁移:
class ChangeColumnUserIdToAutoIncrement < ActiveRecord::Migration
def self.up
execute "ALTER TABLE users modify COLUMN id int(8) AUTO_INCREMENT"
end
def self.down
execute "ALTER TABLE users modify COLUMN id int(8)"
end
end
答案 1 :(得分:0)
Rails正在关注您正在创建的所有表格的ID字段,并且它对您的迁移甚至是schema.rb
文件都是隐藏的。
所以我建议你退后一步思考:你为什么要搞砸它?你确定真的需要吗?
编辑:This answer似乎正是您正在寻找的。 p>
关于“将默认设置为NULL”,再次,为什么要这样做?无论如何,所有列都默认为NULL。但是,如果情况并非如此,您可以在迁移中执行此操作:
change_table :users do |t|
t.string :description, :default => nil
end
希望能回答你的问题。