加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 22:12:06 所属栏目:百科 来源:网络整理
导读:在我的迁移我有: 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,它仍然
在我的迁移我有:
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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读