Mr_*_*zle 15 activerecord rails-migrations ruby-on-rails-3
在我的迁移中,我有:
def up
MyModel.destroy_all
MyModel.create!({:id=>1,:name=>'foo'})
MyModel.create!({:id=>2,:name=>'fooBar'})
MyModel.create!({:id=>3,:name=>'fooNull'})
end
Run Code Online (Sandbox Code Playgroud)
因为我需要覆盖已经在my_models表上的数据
但即使我id
在MySQL上指定它,它仍然从它已经存在的位置继续编号.
我需要在自动增量上休息计数器,id
以便通过我的Ruby on Rails应用程序上的Active Record迁移只有这3个id值的新记录.
Pin*_*nyM 24
你有两个不同的问题.一个是你试图用质量赋值指定id,rails不允许你这样做.有关执行此操作的方法,请参阅在ActiveRecord中创建覆盖id.
另一个问题是自动增量没有重置.每个DBMS都有一种设置递增计数器的独特方式,rails并没有为您提供访问它们的通用方法,虽然它是针对其中一些(而不是MySQL)实现的,请参阅Rails方法在id字段上重置种子
因此,您需要为此运行MySQL特定的SQL,如下所示:
ALTER TABLE my_models AUTO_INCREMENT = 1;
Run Code Online (Sandbox Code Playgroud)
这应该重置为表中最大id之后的数字(如果没有,则为1)
Dan*_*G2k 12
如果你使用PostgreSQL,你可以简单地做:
ModelName.connection.execute('ALTER SEQUENCE model_name_id_seq RESTART WITH 1')
Run Code Online (Sandbox Code Playgroud)
例如,重置User模型的自动增量字段将如下所示:
User.connection.execute('ALTER SEQUENCE users_id_seq RESTART WITH 1')
Run Code Online (Sandbox Code Playgroud)
如果其他人想知道如何使用MYSQL进行此操作:这是在迁移中使用的代码,用于重置表的自动增量:
ActiveRecord::Base.connection.execute('ALTER TABLE foo_bars AUTO_INCREMENT = 1')
Run Code Online (Sandbox Code Playgroud)
foo_bars
要重设其auto_increment的表名在哪里。 归档时间: |
|
查看次数: |
16091 次 |
最近记录: |