在我的迁移我有:
def up MyModel.destroy_all MyModel.create!({:id=>1,:name=>'foo'}) MyModel.create!({:id=>2,:name=>'fooBar'}) MyModel.create!({:id=>3,:name=>'fooNull'}) end@H_502_3@因为我需要覆盖已经在my_models表上的数据
但是即使我在MysqL上指定了id,它仍然是从已经存在的位置继续编号.
我需要把计数器放在id的自动增量上,通过我的Ruby on Rails应用程序上的Active Record迁移,才能拥有这个id值的3个新记录.
解决方法
你有两个单独的问题.一个是你试图用大量的分配来指定id,rails不会让你这样做.参见
Overriding id on create in ActiveRecord的一种方法来做到这一点.
另一个问题是自动增量不会重置.每个DBMS都有一个独特的设置增量计数器的方法,而rails不能给你一个通用的方法来访问它们,尽管它实现了一些(而不是MysqL),参见Rails way to reset seed on id field
ALTER TABLE my_models AUTO_INCREMENT = 1;@H_502_3@这应该重置为表中最大ID之后的数字(如果没有,则为1)