ruby-on-rails-3 – 如何在ActiveRecord迁移中重置自动增量字段?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails-3 – 如何在ActiveRecord迁移中重置自动增量字段?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的迁移我有:
def up
   MyModel.destroy_all
   MyModel.create!({:id=>1,:name=>'foo'})
   MyModel.create!({:id=>2,:name=>'fooBar'})
   MyModel.create!({:id=>3,:name=>'fooNull'})
end

因为我需要覆盖已经在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

所以你需要运行MysqL特定的sql,这就像:

ALTER TABLE my_models AUTO_INCREMENT = 1;

这应该重置为表中最大ID之后的数字(如果没有,则为1)

猜你在找的Ruby相关文章